执行异步作业的函数
A function that do an asynchronized job
我有函数foo:
void foo(){
//Command set A
std::this_thread::sleep_for(100s);
//Command set B
}
Command set A
的第一部分必须阻止执行。但是,sleep
部分和//Command set B
不必阻止执行,也不会返回任何数据。
所以我实现如下:
void foo(){
//Command set A
std::thread t([](){
std::this_thread::sleep_for(100s);
//Command set B
}
t.detach()
}
我在这里正确利用detach
了吗?这是使用detach
的正确位置吗?有没有更好的解决方案?
detach
很少是正确的解决方案。If 完全按照它所说的去做:它删除了std::thread
对象和实际线程之间的连接。线程一直运行,直到它自己完成,但是如果你没有显式实现与线程的通信(例如,通过消息队列),你的程序已经失去了对它的任何控制。
如果程序结束时线程仍处于活动状态,则出现问题。您的进程正在释放其资源并消亡,但线程正在使用其中一些资源愉快地运行。因为所有资源都被释放了,即使是最基本的资源(想想低级C++运行时),这也是 desaster 的秘诀。很有可能,您的程序会在退出时崩溃。
查看std::async
以获得直接的替换。它异步运行任务并立即返回std::future
。即使任务没有返回任何数据,那么未来就是您可以抓住的句柄,并在程序退出时检查线程是否仍在运行 - 并在必要时等待它完成。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- 使用"Task"函数指针队列定义作业管理器
- 将作业传递给另一个函数,而不会延迟 arduino
- 假设我有作业运算符,我的复制构造函数是this = obj可以
- 编写执行与set_symmetric_difference相同的作业的函数
- 我的家庭作业要求我在函数中使用布尔值.我需要将它们传递给函数吗?
- 执行异步作业的函数
- 复制构造函数或作业操作员?我想念什么
- IBM MQ 回调函数调用等待,直到某些作业完成
- C++作业函数错误
- 作业dup2函数
- 欧拉全能函数的ACM问题(家庭作业)
- 作业:c++函数的参数
- c++递归搜索函数(学校作业)