c++ - 如何“停止”等待条件变量的分离线程?
问题描述
我从 Class 中分离一个线程B
:
t1 = std::thread(&Class::method, this);
t1.detach();
作为其正常操作的一部分,它等待条件变量:
cv.wait(lock);
但是,当我关闭我的 B 应用程序时,分离的线程仍然存在。B::~B()
调用时如何停止/清理该线程?
解决方案
试试这个片段:设置 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();
推荐阅读
- groovy - 如何在运行测试步骤时运行脚本断言?
- .net - 如果由 ThreadPool 中的活动线程执行,有没有办法知道什么任务?
- c# - 有没有办法可以在 xamarin.forms 上使用 webview.postURL?
- ios - 如何取消初始化子 UIViewController?
- android - 从图库中导入图像并将其设置为图像视图
- typescript - 无法在 Phaser 3 的物理组中禁用精灵的重力
- ios - 如何让按钮只在有限的时间内出现?
- javascript - 将数组数组转换为 LatLang 作为多边形路径
- ios - Apple Mach-O 链接器错误 _OBJC_CLASS_$_FIRInstanceID
- esp8266 - ESP8266 Core 1.3.0 和 Lwip 源码