C ++ 11在main()返回时杀死线程?

时间:2014-07-04 10:55:35

标签: c++ multithreading c++11

我听说"现代操作系统将清理该过程在关闭它时创建的所有线程"但当我返回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();函数被传递,因为程序强制终止,这里再次出现错误:)

1 个答案:

答案 0 :(得分:5)

应用程序中发生的事情与操作系统可能做的事情无关。

如果std::thread被销毁,仍然有一个可连接的线程,那么应用程序会调用std::terminate,这就是显示的内容:http://en.cppreference.com/w/cpp/thread/thread/~thread`

使用c ++ 11线程,如果你不关心它们的完成时间,你要分离,要么在线程对象被销毁之前你需要加入。