C++ 用C+中的单独线程读取标准DIN+;
我试图在主程序运行搜索算法的同时获得一个单独的线程来读取stdin。理想情况下,它应该设置一些主线程可以读取的停止/退出标志 我目前拥有以下代码:C++ 用C+中的单独线程读取标准DIN+;,c++,multithreading,stdin,C++,Multithreading,Stdin,我试图在主程序运行搜索算法的同时获得一个单独的线程来读取stdin。理想情况下,它应该设置一些主线程可以读取的停止/退出标志 我目前拥有以下代码: void COMM::listen_for_input(bool stopset, long long stoptime) { std::string input = ""; while (!stopset || getTimeMs() < stoptime) { input = "
void COMM::listen_for_input(bool stopset, long long stoptime) {
std::string input = "";
while (!stopset || getTimeMs() < stoptime) {
input = "";
std::getline(std::cin, input);
if (input.find("quit") != std::string::npos) {
ld.quit = true;
return;
}
if (input.find("stop") != std::string::npos) {
ld.stop = true;
return;
}
if ((stopset && getTimeMs() >= stoptime) || Search::isStop.load(std::memory_order_relaxed)) {
return;
}
}
}
我的问题是listener.join()调用只是等待函数listen\u for\u input()实际读取“stop”或“quit”。我已经通过调试器检查了搜索程序线程是否正确连接,以及程序是否在调用listener.join()时只是等待。这意味着它们由于超时而停止(使用与getTimeMs()>=stoptime相同的逻辑),这意味着该线程应该能够执行相同的操作。。。此外,我还检查了它的“停止”和“退出”是否正确;除非给出其中一个,否则它不会加入
我做错了什么导致while循环永远不会终止?使用单独的线程在stdin上侦听输入的最佳方式是什么
提前感谢:)
listener.detach()代码>而不是listener.join()代码>?我很难理解你的问题。我的问题是,我想让一个线程在主线程同时运行一个算法的同时,侦听来自stdin的输入。然后,主线程应该能够查看是否有来自用户/gui的“停止”或“退出”命令(程序通常由gui控制)。我将尝试listener.detatch()
std::thread listener(COMM::listen_for_input, info->timeset, info->stoptime);
/* Run the main thread */
listener.join();