[英]Send input on std::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;
}
因此,当不再满足条件时,两者都应该退出,但程序会一直等待用户输入。 如果我只是输入任何随机字符并按回车键,程序就会正常退出。
我的问题是,在加入辅助线程之前,是否有任何方法可以从主线程向 std::cin 发送一些输入,以便另一个线程将继续执行并退出,而无需任何进一步的用户输入。 提前致谢
这是一个跨平台的解决方案:
诀窍是创建第三个线程,其唯一的工作就是接收输入。 一旦处理,输入就会被记录下来。 第二个线程可以使用互斥体以任何所需的时间间隔异步访问这些记录。 这消除了std::cin
的阻塞特性,并允许您随时终止线程。
在 Windows 上,您可以使用CreateThread
代替std::thread
。 它返回一个句柄,您可以使用该句柄与TerminateThread
在任何时候终止给定线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.