C ++构建控制台服务器日志+命令

时间:2014-01-24 10:16:48

标签: c++ multithreading console

您好我想用C ++构建一个控制台服务器.. 它必须写出其他线程的输出,但也接收命令 我能怎么做?我确定我的例子是错的:/因为cin会阻止所有......

static string output = "";

//The function we want to make the thread run.
void task1(string msg){
    for (int i= 0; i < 10; i++)
        output += "task1 says: " + msg + "\n";
}

void task2(string msg){
    char c;
    cout << output << endl << "_> ";
    output = "";
    cin >> c;
    cout << endl;
}

int main(){
    // Constructs the new thread and runs it. Does not block execution.
    thread t1(task1, "Hello");
    thread t2(task2, "Hello");

    //Makes the main thread wait for the new thread to finish execution, therefore blocks its own execution.
    t1.join();
    t2.join();

    char c;
    cin >> c;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

首先,你有一个竞争条件,两个线程可以同时修改output变量。

对于另一个问题,您需要使用低杠杆平台特定功能来检查是否有准备好从标准输入读取的输入,并且您可能需要使用较低级别的非阻塞功能来读取该输入同样。在POSIX系统(如Linux或OSX)上,您可以使用例如fcntl STDIN_FILENO(标准输入文件描述符)非阻止,然后select进行投票,read进行阅读。