我想在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