我想在C++中有一个在后台执行异步任务的对象,但仍然可以通过代码使用它来请求释放,而不会破坏事情。如何在C++中构造一个执行异步后台任务的对象
比方说,我有一个对象是这样的:
class MyObj {
std::thread* asyncTask;
bool result;
public:
MyObj() {
asyncTask = new std::thread([this](){
result = doSomething();
});
};
bool isResult() {
return result;
};
}
,你会如何去确保该对象可仍然没有终止该进程(由于线程仍然可以释放可连接/在破坏的同时运行)?我想过一些涉及用线程运行计数器来延迟析构函数的方法,但这似乎并不是正确的解决方案。部分复杂性是线程需要正常访问类的元素,所以它不能分离。
这似乎与以下情况更相关:https://cs.stackexchange.com/ – Jonas
当线程句柄在线程之前被破坏时,您可以终止线程,杀死整个进程,等待线程完成或分离线程。所有这些选项都很糟糕。 – nwp
如果线程需要访问创建类的元素,那么你实在别无选择,只能延迟破坏外部类直到线程结束。 – lcs