代码:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
void thread1()
{
while (true)
{
cout << this_thread::get_id() << endl;
}
}
void main()
{
thread t1(thread1);
thread t2(thread1);
this_thread::sleep_for(chrono::seconds(1));
t1.detach();
t2.detach();
}
有人可以解释为什么它在分离后崩溃以及如何解决这个问题?
答案 0 :(得分:1)
出现错误的原因是在取消初始化后访问CRT(C ++运行时库)。
工作线程通过访问std::cout
来使用CRT。当主线程离开main
函数时,CRT库正在卸载,但工作线程仍在尝试使用它。可能会有运行时检查,因此您会收到错误消息,而不仅仅是程序崩溃。
最好不要使用detach
方法,并确保您生成的所有线程都在程序退出时完成执行。