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

Pil*_*Dev 6 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;
}
Run Code Online (Sandbox Code Playgroud)

如果我取消注释detach();,没有问题,但我的处理线程将是套接字读取器/写入器,它们将无限运行(直到主要返回).那怎么处理呢?怎么了?

编辑:也就是说,我不能逐个分离()每个线程,因为它们不会被正常终止(直到结束).哦,再次,如果我从DDOS窗口的X按钮关闭我的程序,(我的简单解决方案在这种情况下不起作用)我的detach(); 函数被传递,因为程序强制终止,这里再次出错:)

gal*_*p1n 5

应用程序中发生的事情与操作系统可能执行的操作无关.

如果std::thread被破坏,仍然有一个可连接的线程,应用程序调用的std::terminate,而这正是被显示出来:http://en.cppreference.com/w/cpp/thread/thread/~thread `

使用c ++ 11线程,如果你不关心它们的完成时间,你可以分离,或者在线程对象被销毁之前你需要加入并且需要加入.