即使执行了SetConsoleCtrlhandler的atexit或ConsoleHandler,为什么线程也会中断?

时间:2013-12-02 17:00:20

标签: c++ windows command-line interrupt-handling atexit

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

  

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

通常情况不够。您还必须等待线程完成(thread.join()WaitForMultipleObjects或类似的事情。)

答案 1 :(得分:0)

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