为什么在调用终止时获取主线程ID而不是子线程ID

时间:2019-01-06 00:48:01

标签: multithreading c++11

我编写了一个示例程序,其中有意未加入线程t1。

示例:

(uint id, int data1, int data2)

我的理解是(可能是错误的):

当控件到达main()函数的结尾时,将调用线程t1 的析构函数。

$include <iostream>
#include <thread>
using namespace std;
void fun3()
{
    cout << "t1:: "<<this_thread::get_id() << endl;//prints t1 Thread ID.
}
void myterminate() {
    cout << "terminate:: "<<this_thread::get_id() << endl;//prints main thread ID!!  
                                                      //Why it is not printing thread t1's id ??


    abort();  // forces abnormal termination
}
int main()
{
    cout << "main:: "<<this_thread::get_id() << endl;//prints main Thread ID
    std::set_terminate(myterminate);
    thread t1(fun3);
    //t1.join(); // intentionally commented to see who will call terminate method.
    getchar();
    return 0;
}

由于线程t1正在调用Terminate()方法,因此 myterminate()方法应打印t1的线程ID。但是,而不是打印t1的线程ID 它正在打印主线程ID。

所以我的疑问是-为什么 myterminate()方法打印main的线程ID而不是子线程的ID?

PS-我正在学习线程编程,所以如果我错过了一个明显的概念,请原谅。

谢谢。

0 个答案:

没有答案