如何在TBB中终止和停止任务
How to terminate and stop the task in TBB?
我面临一个问题,其中我有两个任务正在运行,一个是父任务,一个是子任务,子任务正在运行一个无限循环,其中一些条件得到满足,我想手动终止子执行。如何在TBB
您是想突然终止任务,还是只是让它顺利地离开循环,这样任务就可以自己结束了?
对于第一种情况,你可以使用destroy方法
第二种情况可能是构建代码的更好方法。假设你的循环有一个条件,比如
while(!finished) {
...
}
您可以将其更改为在finished
变量上使用锁,以便您也可以从任务外部访问它,并在希望任务结束时更改其值。您只需要使用以下函数来读取和写入值,而不是直接访问变量,无论是在任务外部还是在任务内部。
tbb::mutex lock;
bool finished;
void finish() {
lock.lock();
finished = true;
lock.unlock();
}
bool is_finished() {
lock.lock();
bool ret = finished;
lock.unlock();
return ret;
}
所以循环条件现在是while(! is_finished())
在主线程的某个地方当你想让它结束时你就调用task.finish()
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 有没有任务栏API可以立即应用注册表更改
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- llvm构建器向基本块添加终止符
- 如何使用隔离>终止执行来停止所有线程
- 用于将C++代码转换为 Web 程序集的脚本未终止
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 终止 QProcess 不会终止子进程
- 如何创建线程序列以按照启动顺序执行任务?
- C++一个线程如何正确通信其任务已完成?
- 在线程之间拆分任务总是值得的吗?
- 运行代码时,c++ 会终止进程
- 使应用程序/服务,以便在任务管理器中尝试结束/终止其进程将导致"Unable to Terminate Process"
- 终止Qt进程:Windows任务管理器在做什么,我没有?
- C++-如何在程序终止后完成一些任务
- 如何在TBB中终止和停止任务
- 如何在应用程序通过任务管理器终止时保存数据