我在Windows 7下有一个多线程应用程序。
当用户在命令行的角落按“X”,“Ctrl + C”,关闭操作系统等等时,我需要在具有开放描述符,连接等的线程中正确完成作业。
我为SetConsoleHandler设置了一个处理程序,为其他线程设置适当的标志以正确完成其工作。但所有这些都被中断,y退出代码为0xc000013a。甚至我的处理程序也没有时间设置标志。
当我尝试在atexit处理程序中执行相同的操作时,同样的问题仍然存在。
为什么即使在中断处理程序中所有线程都停止了?我怎样才能避免这种情况,让我的所有线程完成他们的工作?
答案 0 :(得分:0)
为其他线程设置适当的标志以正确完成其作业
通常情况不够。您还必须等待线程完成(thread.join()
或WaitForMultipleObjects
或类似的事情。)
答案 1 :(得分:0)
我的问题是,一些子子线程在系统资源上使用了定时等待,所以每个人都需要从等待加入线程中唤醒。所有这些都是连续停止所以他们需要太多时间才能停下来。