多线程问题:调用了ResumeThread()恢复不了线程呢?

liudows 2005-03-20 08:40:52
我的程序是这样的:
程序是win32控制台程序。主线程A中用CreateThread()开了线程B,紧接着在A中调用SuspendThread()将A自身挂起自身挂起。在线程B中执行一些操作后,调用ResumeThread()恢复线程A,但是A中SuspendThread()后面的语句并没有被执行,光标一直闪烁,没有其它相应。
请问这是怎么回事?
谢谢!
...全文
563 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
keikey_xi 2005-03-24
  • 打赏
  • 举报
回复
这个问题我也遇到过,到现在也没解决,不过我测试的是NTVDM.EXE程序,当时我在进程中发现它时将其挂起,然后想恢复就不行了。有没有遇到同样情况的?如何解决?其它Windows程序都行。
swimmingfish2004 2005-03-22
  • 打赏
  • 举报
回复
楼主是怎样设置信号量来保证执行的串行化的?
mwp 2005-03-22
  • 打赏
  • 举报
回复
SuspendThread()多少次就要resumeThread()多少次
liudows 2005-03-21
  • 打赏
  • 举报
回复
原因找到了,由于是并发执行,可能B中的ResumeThread()先执行,A中的Suspend才执行,从而A无法被唤醒。解决方法是,设置信号量,保证执行的串行化,即ResumeThread一定在SuspendThread之后执行。
但还是有问题,即使串行化了,调用ResumeThread还是没法唤醒线程A。
swimmingfish2004 2005-03-21
  • 打赏
  • 举报
回复
是不是多次调用了SuspendThread,每次调用SuspendThread“暂停数”加1,调用ResumeThread减1.只有在其暂停数为0时,才会给线程调度处理器时间。
oyljerry 2005-03-21
  • 打赏
  • 举报
回复
要不,不挂起线程,而是用内核事件event来控制执行的流程
晨星 2005-03-20
  • 打赏
  • 举报
回复
再不行,把关键代码帖出来看看吧。
晨星 2005-03-20
  • 打赏
  • 举报
回复
你把A的线程句柄传给B了吗?
还有,看看ResumeThread的返回值是啥?是0么?不是的话,用GetLastError()查一下。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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