在 std::cin 上发送输入

Mdp*_*p11 5 c++ multithreading cin

我正在运行一个带有主线程和辅助线程的程序,并且在满足特定条件后,两者都应该退出。问题是辅助线程,在检查运行条件仍然有效后,使用 std::cin 等待用户输入,因此如果在调用 std::cin 后满足条件,则线程继续等待用户输入。代码是这样的:

MainThread()
{
    std::thread t1{DoOtherWork}
    ...
    while(condition)
    {
         DoWork();
    }

    t1.join();
}

DoOtherWork()
{
    while(condition)
    {
         char c;
         std::cin >> c;
         ProcessInput(c);
    }

    return;
}
Run Code Online (Sandbox Code Playgroud)

因此,当不再满足条件时,两者都应该退出,但程序会卡在等待用户输入。如果我只是输入任何随机字符并按回车键,程序就会正常退出。

我的问题是,在加入辅助线程之前,主线程是否有任何方法可以将一些输入发送到 std::cin,以便另一个线程将继续执行并退出而无需任何进一步的用户输入。提前致谢

Hi *_* SO 1

这是一个跨平台的解决方案:

诀窍是创建第三个线程,其唯一的工作就是接收输入。处理后,输入将被记录。第二个线程可以使用互斥体以任何所需的时间间隔异步访问这些记录。这消除了线程的阻塞性质std::cin,并允许您随时终止线程。

在 Windows 上,您可以CreateThread使用std::thread. 它返回一个句柄,您可以使用TerminateThread该句柄随时终止给定的线程。