0

我在 Windows 7 下有一个多线程应用程序。

当用户在命令行的角落按“X”、“Ctrl+C”、关闭操作系统等时,我需要正确完成具有打开的描述符、连接等的线程中的作业。

我为 SetConsoleHandler 设置了一个处理程序,它为其他线程设置适当的标志以正确完成它们的工作。但是所有这些都被中断,并且 y 以代码 0xc000013a 退出。有时甚至我的处理程序也没有时间设置标志。

当我尝试在 atexit 处理程序中执行相同的操作时,同样的问题仍然存在。

为什么即使在中断处理程序期间所有线程都停止?我怎样才能避免这种情况并让我所有的线程完成他们的工作?

4

2 回答 2

0

为其他线程设置适当的标志以正确完成其工作

通常是不够的。您还必须等待线程完成(thread.join(),或WaitForMultipleObjects,或类似的东西)。

于 2013-12-02T17:30:28.380 回答
0

我的问题是一些子线程在系统资源上使用了定时等待,所以他们每个人都需要从等待加入线程中醒来。而且他们都是连续停下来的,所以他们需要太多的时间才能停下来。

于 2013-12-12T12:23:18.160 回答