我的程序有许多不同的线程处理不同的事情,其中一个处理用户输入。
其他线程没有太多阻塞调用的方式,那些阻塞的线程是基于网络的,因此当套接字关闭时将被中断或正常返回。
然而,用户线程调用了 std::cin
以获取用户输入。这样做的效果是,当所有其他线程都死了时,用户线程仍在阻塞用户输入,并且只会在下一次输入时死掉。
有什么方法可以让我在阻塞之前检查是否有任何用户输入要抓取?
我知道 cin.peek()
存在,但根据我的经验,如果没有任何内容可读,它就会阻塞。假设我正确使用它
我的代码基本上是一个无限循环,当另一个线程切换条件变量时停止:
void doLoop()
{
while (running) //running is shared between all threads and all others die quickly when it is false. It's set to true before the threads are started
{
string input = "";
getline(cin, input);
//Handle Input
}
}
我在 Windows 上,使用 VS2013,无法使用外部库。我一直在使用 windows.h 和 std。
最佳答案
我相信 C++ 标准没有提供一种不阻塞地检查标准输入的方法。由于您愿意使用特定于平台的功能,“kbhit()”可能适合您的需要,但它在 Windows 中已被弃用。提供了一个替代方案,_kbhit()
。当然这不能移植到其他平台。
这是 MSDN 的链接:_kbhit
关于C++ 控制台输入 block 所以我不能杀死线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27710672/