我有一个线程正在调用std::getline(std::cin,input),另一个线程每隔x分钟唤醒一次并检查状态。如果状态为True,我的整个c++应用程序需要终止/关闭。问题是getline()是一个阻塞调用,当我将loop_status设置为True时,它仍然不会停止,因为getline()是阻塞的。我如何退出调用getInput()的线程?
std::atomic<bool> loop_status{false}
//在线程1中调用getInput(){
while(!loop_status){
std::string input;
getline(std::cin,input);
print(input);
}
}
//在线程2中调用
check(){
while(!loop_status){
std::this_thread::sleep_for(chrono::milliseconds(5000));
//check some status
if(some_status){
loop_status=true;
}
}
}
main(){
thread t1(getInput());
thread t2(check);
t1.join();
t2.join();
return 0;
}
1条答案
按热度按时间h7appiyu1#
简单地调用
std::exit(EXIT_SUCCESS)
就足够了,例如: