关于线程嵌套挂起的疑问

belllab 2004-04-05 04:54:02
我在程序内使用了两个线程,一个用于处理接收Socket信息,一个用于发送Socket信息。我同时使用了错误处理机制,也就是当检测到Socket有错误时,我会将线程挂起。然后有一个定时器来检测Socket是否连接正常,如果不正常的话,在等待相应的时间后会重新连接Socket。
现在的问题是,在两次连接的间隔时间内,检测定时器会运行多次,也就有可能执行多次挂起操作,问题产生了,当我将Socket连接好后,我只有一次Resume,导致了线程未能完全Resume。查Delphi帮助才明白,Calls to Suspend can be nested,也就是说此挂起可以嵌套!!
虽然问题已经解决,但我还是不明白,为什么允许嵌套?有什么特别的意思吗?
因为一但挂起,线程就已经不能运行了.
...全文
56 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphax 2004-04-12
  • 打赏
  • 举报
回复
呵呵,这还不简单吗

假设有3个thread

threadA_proc()
{
suspendthread(threadC); (1)
//do something (5)
resumethread(threadC); (6)
}

threadB_proc()
{
suspendthread(threadC); (2)
//do something (3)
resumethread(threadC); (4)
}

假设ThreadA, ThreadB交错执行,按照括号里数字得顺序,那么
如果没有这个suspend count的话,
那么在(5)这一步就会发生意想不到的结果

belllab 2004-04-12
  • 打赏
  • 举报
回复
alphax(多喝了三五杯) :我明白这个原理,但没想明白为什么要这么设计?有什么特殊意义吗?
alphax 2004-04-09
  • 打赏
  • 举报
回复
所谓嵌套,也就是你suspend多少次,就必须resume多少次,这样才能真正resume起来
操作系统维护这个计数
belllab 2004-04-09
  • 打赏
  • 举报
回复
唉,还是没什么人
belllab 2004-04-08
  • 打赏
  • 举报
回复
顶一下
menggirl 2004-04-08
  • 打赏
  • 举报
回复
顶一下
belllab 2004-04-07
  • 打赏
  • 举报
回复
高手呢?
belllab 2004-04-06
  • 打赏
  • 举报
回复
up
belllab 2004-04-06
  • 打赏
  • 举报
回复
到底是干什么用的?
pchaos 2004-04-06
  • 打赏
  • 举报
回复

还真没想过。
可能和com里面的计数器类似的功能吧
menggirl 2004-04-06
  • 打赏
  • 举报
回复
顶一下
belllab 2004-04-05
  • 打赏
  • 举报
回复
高手呢?
顶一下

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧