应用程序结束时的资源释放及线程问题

不知道这个标题概括得对不对,其实主要想说后面一点。资源释放问题其实都很熟悉了,但线程同步问题却关注不多(至少我是第一次碰到这类问题)。做了几个产品级别要求的东西后,很有体会:一个程序的结束比它的初始化要麻烦得多。这在多线程程序中体现得尤其明显。

这两天改了一下原来的Simple HostMonitor,发现偶尔在退出的时候程序会崩溃,而且在调试模式下也捕捉不到异常,往往甚至vshost-clr2.exe都挂了。因为程序很简单啦,稍微一想估计是在ping的线程上出问题了,在程序结束时还有ping没有完成。于是在程序结束前先把显示隐藏了,主线程Sleep几秒钟,等ping都返回或超时了再结束进程,问题果然解决了。

对于多线程的程序,在结束前发出结束信号,然后等待所有线程完成当前工作或清理再退出应该是很通常的行为,对于线程可明确列出的情形,也可以考虑采用WaitHandle.WaitAll()的方法等待所有线程完成当前工作或清理。至于直接Kill线程的作法,一般还是不要考虑了。

posted on 2010-03-04 01:59  Gildor Wang  阅读(553)  评论(0编辑  收藏  举报

导航