终止当前线程

时间:2015-03-24 23:18:34

标签: c++11 stdthread

如何在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);
}

1 个答案:

答案 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;
}