首页 > 解决方案 > 如何“停止”等待条件变量的分离线程?

问题描述

我从 Class 中分离一个线程B

t1 = std::thread(&Class::method, this);
t1.detach();

作为其正常操作的一部分,它等待条件变量:

cv.wait(lock);

但是,当我关闭我的 B 应用程序时,分离的线程仍然存在。B::~B()调用时如何停止/清理该线程?

标签: c++multithreadingc++11

解决方案


试试这个片段:设置 bool 成员变量discard_true避免执行您计划的流程执行:

std::thread([&](){
   std::lock_guard<std::mutex> lock(mutex_);
   cv.wait(lock,[](){ return normal_predicate_here || discard_ ;});
   if(discard_) return;
   // execute scheduled process
}).detach();

推荐阅读