【发布时间】:2014-07-04 10:55:34
【问题描述】:
我听说“现代操作系统会在关闭进程时清理进程创建的所有线程”,但是当我返回 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 返回)。那么如何处理呢?怎么了?
编辑:也就是说,我不能一个接一个地分离()每个线程,因为它们不会被正常终止(直到结束)。哦,再一次,如果我从 DDOS 窗口的 X 按钮关闭我的程序,(我的简单解决方案在这种情况下不起作用)我的 detach();由于程序强制终止,函数被传递,这又是错误:)
【问题讨论】:
-
你想要发生什么?你想退出程序还是让它永远运行?
-
@usr 我只想在
main()返回时正常终止(edit: terminate/detach)所有线程。 -
再读一遍你听到的那句话,看看它是如何从
main返回的。 -
请不要将引用格式化为代码。在英语中,我们使用引号来区分引文。
-
@R.MartinhoFernandes 哦,没关系。我是新来的,对此感到抱歉:)
标签: c++ multithreading c++11