C++ C++;:按ENTER键前读取字符

C++ C++;:按ENTER键前读取字符,c++,multithreading,cin,conio,C++,Multithreading,Cin,Conio,现在大概有几个小时,我试图弄清楚如何在按下ENTER键(通过使用线程)之前读取cin中的字符。我知道conio.h库,但我不想使用它 我编写了一个简单的程序,从用户那里获取数据并将其保存在“msg”字符串中。程序具有每秒清除控制台的子线程。我想做的是: 用户输入一些数据,但不按ENTER键,因此不会保存在“msg”变量中 控制台清除 将用户键入的字符发送给cout,这样他甚至不会注意到控制台已被清除 对我的英语很抱歉,节目如下: #include<iostream> #include

现在大概有几个小时,我试图弄清楚如何在按下ENTER键(通过使用线程)之前读取cin中的字符。我知道conio.h库,但我不想使用它

我编写了一个简单的程序,从用户那里获取数据并将其保存在“msg”字符串中。程序具有每秒清除控制台的子线程。我想做的是:

  • 用户输入一些数据,但不按ENTER键,因此不会保存在“msg”变量中
  • 控制台清除
  • 将用户键入的字符发送给cout,这样他甚至不会注意到控制台已被清除
  • 对我的英语很抱歉,节目如下:

    #include<iostream>
    #include<string>
    #include<winsock2.h>
    #include<process.h> 
    #include<windows.h>
    using namespace std;
    
    
    void __cdecl ThreadProc( void * Args )
    {
    
        while( true ){
            system("cls");
            cout << "Input: ";
            /*
            char c;
            while((c=cin.peek()) != '\n')
                cin.get(c);
            cout << c;
            */
            Sleep(1000);
        }
        _endthread();
    }
    
    
    int main(){
        HANDLE hThread =( HANDLE ) _beginthread( ThreadProc, 0, NULL );
    
        while (true){
            string msg;
            getline(cin,msg);
            cout << "MSG:" << msg << endl;
            cin.clear();
            fflush(stdin);
        }
        return 0;
    }
    
    #包括
    #包括
    #包括
    #包括
    #包括
    使用名称空间std;
    void\uu cdecl ThreadProc(void*Args)
    {
    while(true){
    系统(“cls”);
    
    cout要做您想要做的事情,您需要合并一个消息队列和更新方法

    你能用你展示的方式来做吗?当然,但这将是一个巨大的痛苦,cin没有办法做到这一点


    简单地在两边都有一个消息队列,每个客户端的当前状态(AblithtoSyAccess消息,不能等),并且在用户再次能够接收消息之后运行每个客户端调用的更新方法。< / P>没有标准的C++库函数来执行此操作。您必须使用OS特定的代码。(而不是

    cin
    ——但你可能会做一些类似的事情,对你有用),或者使用第三方库(诅咒,或类似)。不知道你为什么要这么做。你是在写键盘记录程序吗?而且,从多个线程使用
    cin
    几乎肯定会导致各种各样的坏事。@UP我不是在写键盘记录程序,而是在写聊天程序。只是编辑了这篇文章。
    void show_chat(){
        system("cls");
        for(unsigned int i =0;i<chat.size();i++){
            cout << "[" << date[i].tm_hour << ":" << date[i].tm_min << ":" << date[i].tm_sec << "] " << chat[i] << endl;
        }
        cout << "Input: ";
    }