main()返回时终止线程

C++11 Kill threads when main() returns?

本文关键字:终止 线程 返回 main      更新时间:2023-10-16

我听说"一个现代的操作系统会在关闭进程时清理进程创建的所有线程",但是当我返回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(); s,没有问题,但我的处理线程将是套接字读取/写入器,它们将无限运行(直到main返回)。那么该如何应对呢?怎么了?

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

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

如果std::thread被破坏,仍然有一个可接合的线程,应用程序调用std::terminate,这就是所显示的:http://en.cppreference.com/w/cpp/thread/thread/~thread '

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