【发布时间】:2021-06-13 16:49:04
【问题描述】:
我正在运行一个带有主线程和辅助线程的程序,并且在满足某个代码后,两者都应该退出。 问题是辅助线程,在检查运行条件仍然有效后,使用 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 发送一些输入,以便另一个线程将继续执行并退出,而无需任何进一步的用户输入。 提前致谢
【问题讨论】:
-
这有用吗? non-blocking std::getline, exit if no input详细的解决方案我没看过,不过好像是异步接受输入,线程可以自己结束。
-
如果这是针对 linux 的,你可以使用信号 API 来解除阻塞,即
pthread_kill/sigaction,我在 C 中使用过几次,我想在 C++ 中大致相同。
标签: c++ multithreading cin