如何在C ++ 11中干净地终止当前的子std :: thread?终止的决定是在主线程方法的函数调用深度4或5进行的,所以我不想检查是否应该在每次返回时终止。我已经查看了exit并终止了,但看起来它们终止了整个进程,而不仅仅是当前线程。
例如:
void A() { B(); ... }
void B() { C(); ... }
void C() { D(); ... }
void D() { /* oops! need to terminate this thread*/ }
void main() {
thread t(A);
}
答案 0 :(得分:0)
另一种方法是使用std::async
并从您希望终止的线程中抛出异常。然后,您可以在异步调用返回的get()
上调用future
来检索异常并正常终止。像这样的东西,例如:
#include <iostream>
#include <thread>
#include <future>
void A();
void B();
void C();
void D();
void A() { while (true) B(); }
void B() { while (true) C(); }
void C() { while (true) D(); }
void D() { throw -1; }
int main()
{
auto future = std::async(A);
try {
future.get();
}
catch (int e) {
// Handle thread termination
std::cout << "Thread threw exception " << e << '\n';
}
std::cout << "Application terminating..." << '\n';
return 0;
}