我编写了一个示例程序,其中有意未加入线程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-我正在学习线程编程,所以如果我错过了一个明显的概念,请原谅。
谢谢。