C++ 在std::cin上发送输入
我正在运行一个带有主线程和辅助线程的程序,在满足某个条件后,这两个线程都应该退出。 问题是次线程,在检查运行条件是否仍然有效后,使用std::cin等待用户输入,因此如果在调用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
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使用跨平台解决方案编辑。