C++ 在std::cin上发送输入

C++ 在std::cin上发送输入,c++,multithreading,cin,C++,Multithreading,Cin,我正在运行一个带有主线程和辅助线程的程序,在满足某个条件后,这两个线程都应该退出。 问题是次线程,在检查运行条件是否仍然有效后,使用std::cin等待用户输入,因此如果在调用std::cin后满足条件,线程将继续等待用户输入。代码如下所示: MainThread() { std::thread t1{DoOtherWork} ... while(condition) { DoWork(); } t1.join(); } Do

我正在运行一个带有主线程和辅助线程的程序,在满足某个条件后,这两个线程都应该退出。 问题是次线程,在检查运行条件是否仍然有效后,使用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;
}
所以,当条件不再满足时,两者都应该退出,但程序仍在等待用户输入。如果我只是输入任意一个随机字符,然后按enter键,程序就会很好地退出

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

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

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


在Windows上,您可以使用
CreateThread
而不是
std::thread
。它返回一个句柄,可与
TerminateThread
一起使用,以在任意点终止给定线程。

这有帮助吗?我还没有详细阅读解决方案,但是它似乎是异步接受输入,线程可以自己结束。如果是Linux,你可以使用信号API来解除它,即<代码> pthRead杀死/<代码>代码> SigActudio>代码,我在C++中使用了几次,我想象C++是大致相同的。谢谢,但我想使用独立于平台的solution@Mdp11使用跨平台解决方案编辑。