惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
A
About on SuperTechFans
J
Java Code Geeks
量子位
博客园 - 三生石上(FineUI控件)
博客园 - Franky
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
D
DataBreaches.Net
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - badog

SQL Server 中的模糊查询 LIKE JavaScript中引号的嵌套 - badog - 博客园 SQL Server 中 nchar和nvchar的性能差距 全国各地讨老婆成本一览 去上海滑雪 好像最近买了很多东西 雁荡山小记 Google搜索引擎使用技巧2005版 - badog - 博客园 一道引起全美大学生和很多军械学院人士举论坛辩论的逻辑题 (大家轻松一下) LV手纸 我的人格类型是: ISTJ (内向,感觉,思维,判断) Visual Studio .net 默认编码问题 Invoke的TargetInvocationException问题 吃饭 中秋节的日记 阶段总结(1) 阶段总结 看了一天小说 买东西
编写多线程程序时碰到的一些问题
badog · 2005-09-28 · via 博客园 - badog

最近在写一个调用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到底什么时候用呢?