一旦开始了线程,你需要显式地决定是要等待它完成,还是让它自行运行。如果你的std::thread对象被销毁前未作决定,那么你的程序会被终止(std::thread的析构函数会调用std::terminate())。因此,确保线程地结合或者分离都是你的当务之急。
std::thread对象销毁前未决定分离还是结合的例子:
void do_some_thing()
{
int cnt = 0;
while(true)
{
printf("%s\r\n",__func__);
sleep(1);
}
}
int main()
{
{
std::thread my_thread(do_some_thing);
sleep(5);
printf("Now my_thread object is going to destroy...\r\n");
}
while(true)
{
sleep(1);
}
return 1;
}
运行结果如下, 进程异常退出:
解决方案1:在std::thread对象销毁前调用join函数等待线程退出:
{
std::thread my_thread(do_some_thing);