我听说“现代操作系统将在关闭该进程时清理该进程创建的所有线程”,但是当我返回时main()
,出现以下错误:
1)该应用程序已请求运行时以异常方式终止它。请与应用程序的支持团队联系以获取更多信息。
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(); 由于程序强制终止而传递函数,这又是错误:)
应用程序中发生的事情与OS可能做什么无关。
如果std::thread
被破坏,仍然有一个可连接的线程,应用程序调用的std::terminate
,而这正是被显示出来:http://en.cppreference.com/w/cpp/thread/thread/~thread `
使用c ++ 11线程,如果您不在乎它们的完成时间,则可以分离,或者在线程对象被销毁之前需要并需要加入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句