一天到晚游泳的鱼

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近在写一个调用Web Service 的Windows服务程序,为了提高效率采用多线程来做(俺是第一次做多线程,见笑了)。后来在停止服务时碰到了几个问题:
1。因为是要调别人的Web Service,而有的Web Service需要执行很长时间(最长的要七分多钟),所以停止服务时如果正在执行一个长时间的Web Service,Windows会告诉你说服务无法停止,比较郁闷,又没有地方可以设置停止服务时Windows等待的时间。
2。因为是多线程,停止线程时又碰到了许多问题,一开始我是用interrupt来停止线程,看MSDN说是只有在线程处于waitjoinsleep时才能停止,所以我以为只有在线程等待资源时才会被打断,后来才发现ThreadInterruptedException是马上抛出来的,不管你的线程正在做什么,而有好多地方我都用了try把exception  处理掉了,(而ThreadInterruptedException又跟ThreadAbortException不同,ThreadAbortException catch之后还是会一直throw出来)所以一直停不掉,而且会打断处理了一半的线程,造成灾难性后果。后来interrupt不用改用一个判断条件while(blnIsStopped)来处理,发现还是停不掉,调试之后发现是我用的Monitor.Wait(), Monitor.PulseAll()有问题,是当前拥有资源的线程结束后没有PulseAll,那其余的线程就会一直处于等待状态而不会去抢占资源,后来没办法把Monitor给删掉了,只用lock语句来进行线程同步。搞不懂,那Monitor到底什么时候用呢?

posted on 2005-09-28 20:27  badog  阅读(789)  评论(1编辑  收藏  举报