停止所有c++线程

gorkyyrv  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(174)

我有一个线程正在调用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;
}
h7appiyu

h7appiyu1#

简单地调用std::exit(EXIT_SUCCESS)就足够了,例如:

while(!loop_status){
    std::this_thread::sleep_for(chrono::milliseconds(5000));
    //check some status 
    if(some_status){
        std::exit(EXIT_SUCCESS);
    }
}

相关问题