C 杀死方法无需不断检查标志
C++ kill method without constantly checking flags
我有几个工作功能,可以调用附件功能,这些功能可能会发生不好的事情。如果附件函数确定发生了不良的事情,我希望能够停止工作功能,而不会在工作功能中放置许多标志检查。例如,
struct Worker {
bool badhappened = false;
Worker() {
std::thread([&]() {
while ( not badhappened );
// kill the work
}).detach();
}
int WorkComponent {
if ( badhappening() )
badhappened = true;
return someint;
}
void DoWork {
// WorkComponents called several times
}
}
,但我不知道该在kill the work
上打电话。DoWork
在单独的线程中发生并不是问题,但是在C 的线程中似乎没有同等的pthread_kill
。是否有一个解决方案不涉及将几个if(badhappened) return;
调用到DoWork
?
长话短说:
没有安全的方法来停止非合件线程。
是的,有一些工具可以强行关闭线程,但您正在要求麻烦。唯一安全的方法是同意终止政策。这归结为在您写作时经常检查旗帜。
来自大师的更多信息:
C 和2011年以后:Scott,Andrei和Herb-问我们任何事情
请参阅30:44系统和原则性的线程终止和程序终止有什么关系?
取消线程也不是POSIX中的好主意:
使用pthread_cancel取消线程:好的练习或不良
相关文章:
- 如何在 clang 的自动会议中检查支持编译标志
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 检查文件是否在 Makefile 中使用某些标志进行编译
- 检查是否为输入流设置了Skipws/noskipws标志
- 标志-检查是否设置了位并且仅设置了这些位
- 在命令行程序中使用布尔值。找不到定义标志并检查它们是否在参数中的方法
- Cmake:如何检查是否已定义了一些标志
- RAWKEYBOARD 标志,检查哪些标志打开,还有 SHIFT、CTRL 和 ALT
- 检查是否在整数变量中设置了标志
- 是否有一种直观的方式检查标志和状态
- 清洁格式标志检查的方法
- C 杀死方法无需不断检查标志
- g++中用于检查数组索引的任何调试标志
- 在 Visual Studio 13 中检查和设置C++项目生成标志
- C++11检查标志的方法
- 检查 pthread_cond_wait() 之前的标志
- SSE本质检查零标志
- 检查位标志
- R:检查编译和加载标志的值
- c++检查枚举标志