我听说"现代操作系统将清理该过程在关闭它时创建的所有线程"但当我返回main()
时,我收到了这些错误:
1)此应用程序已请求Runtime以不寻常的方式终止它。 请联系应用程序的支持团队以获取更多信息。
2)在没有活动异常的情况下终止被叫
我的实现看起来像这样(我现在正在写作,例如抱歉执行不好):
void process(int id)
{
while(true) { std::this_thread::sleep_for(std::chrono::milliseconds(1); } }
}
int main()
{
std::thread thr1(process, 0);
std::thread thr2(process, 1);
//thr1.detach();
//thr2.detach();
return 0;
}
如果我取消注释detach();
,则没有问题,但我的处理线程将是套接字读取器/写入器,它们将无限运行(直到主要返回)。那怎么处理呢?怎么了?
编辑:即,我不能逐个分离()每个线程,因为它们不会被正常终止(直到结束)。哦,再次,如果我从DDOS窗口的X按钮关闭我的程序,(我的简单解决方案在这种情况下不起作用)我的detach();函数被传递,因为程序强制终止,这里再次出现错误:)
答案 0 :(得分:5)
应用程序中发生的事情与操作系统可能做的事情无关。
如果std::thread
被销毁,仍然有一个可连接的线程,那么应用程序会调用std::terminate
,这就是显示的内容:http://en.cppreference.com/w/cpp/thread/thread/~thread`
使用c ++ 11线程,如果你不关心它们的完成时间,你要分离,要么在线程对象被销毁之前你需要加入。