我需要所有线程定期检查它们是否仍应运行,以便它们可以在程序结束时自行终止。除了其中一个之外,这只是检查状态变量的问题,但最后一个是用户交互线程,其循环将无限期地等待用户输入,仅在用户输入指令时检查状态变量。此时程序无论如何都会失败,因为当它没有运行时,它无法正常运行。但理想情况下,我不想达到这一点。
我认为最好的解决方案,如果可能的话,是getline上的超时,但是如果它不可能或是一个不错的选择,我会接受任何允许线程整齐终止的选项
顺便说一句,我看到很多提到std :: getline。无论我是否使用命名空间,getline似乎都有效。一个是另一个的别名,哪个是合适的?
答案 0 :(得分:1)
没有(标准)方法在std::getline
上设置超时。特别是,C ++标准库不知道线程的存在
要回答第二个问题,std::getline
的符合标准的版本是命名空间中的版本。
答案 1 :(得分:0)
执行此操作的最简单方法可能是剥离另一个线程,其唯一目的是执行getline()
。
google返回this result,它给出了一个示例,尽管它严重依赖于Win32。但是,您应该能够将它移植到您正在使用的线程库。
答案 2 :(得分:0)
如果你的线程没有他们需要做的任何清理,那么当你想要结束你的进程时,另一个解决方案就是调用exit
。 exit
将终止所有线程并结束该过程。
答案 3 :(得分:0)
您需要另一个线程来通知用户线程 如何执行此操作取决于您使用的线程库。