《Win32多线程程序设计》–Jim Beveridge & Robert Wiener
- 对于多线程程序,如果用户企图结束程序(主线程)时,子线程尚未完成工作,怎么办?
- 结束一个线程,听起来好容易,但是结束程序必须按次序进行,以避免发生 race conditions。让程序依次序进行是非常重要的,特别是在程序要结束之前。结束一个程序就好像拆除一栋建筑物一样,在你以推土机轧平它之前,你必须确定每一个人都安全离开了屋子。结束一个程序也是这样,每一个线程都被迫结束,不管它进行到哪里。
做法一:在任何子线程还没完成其工作之前,不准用户结束程序(可能需要长时间等待)
缺点:对于GUI程序,可能需要很长的时间等待程序退出,那么程序有可能看起来像是“挂”了一样。
做法二:TerminateThread() 放弃一个线程(微软不建议使用)
缺点:
TerminateThread() 强迫其行动目标(一个线程)结束,手段激烈而有力,甚至不允许该线程有任何“挣扎”的机会。
此函数唯一可以预期并依恃的是:线程 handle 将变成激发状态,并且传回dwExitCod