社区
进程/线程/DLL
帖子详情
多线程问题:调用了ResumeThread()恢复不了线程呢?
liudows
2005-03-20 08:40:52
我的程序是这样的:
程序是win32控制台程序。主线程A中用CreateThread()开了线程B,紧接着在A中调用SuspendThread()将A自身挂起自身挂起。在线程B中执行一些操作后,调用ResumeThread()恢复线程A,但是A中SuspendThread()后面的语句并没有被执行,光标一直闪烁,没有其它相应。
请问这是怎么回事?
谢谢!
...全文
679
8
打赏
收藏
多线程问题:调用了ResumeThread()恢复不了线程呢?
我的程序是这样的: 程序是win32控制台程序。主线程A中用CreateThread()开了线程B,紧接着在A中调用SuspendThread()将A自身挂起自身挂起。在线程B中执行一些操作后,调用ResumeThread()恢复线程A,但是A中SuspendThread()后面的语句并没有被执行,光标一直闪烁,没有其它相应。 请问这是怎么回事? 谢谢!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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()查一下。
多
线程
4:
线程
的相关操作
多
线程
4:
线程
的相关操作。
vb
多
线程
:怎样用VB写
多
线程
尽管vb5是apprent single-
thread
(单
线程
)的.但用addressof加上一些api,就可以非常容易的做
多
线程
.(比vc容易的多,做出来的东西也一样快,因为都是用api). 每一个县城(
线程
,下同)约占用20毫秒的时间片. vb5有一个主
线程
.我们可以另外加一个工作
线程
.对于不清楚什么是单/
多
线程
的程序元,我们用一个简单的列子来说明一下. 再form里加上两个timer控件.
易语言创建
线程
挂起
线程
恢复
线程
销毁
线程
线程
创建Create
Thread
,
线程
挂起Suspend
Thread
,
线程
恢复
Re
sum
e
Thread
,
线程
销毁Terminate
Thread
,都是kernel32的命令,我们自己封装这些
线程
的命令,就是便于我们理解他们的工作机制。 API源码: .版本 2 .DLL命令
恢复
线程
, 整数型, "kernel32", "Re
sum
e
Thread
", ,
恢复
线程
.参数 h
Thread
, 整数型, ,
线程
的句柄 .DLL命令 销毁
线程
, 整数型, "kernel32", "Termi
容易歧义的
线程
函数Suspend
Thread
、Re
sum
e
Thread
和如何获知
线程
是否还在运行
// Win32
Thread
.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdio.h> #include <windows.h> DWORD WINAPI TreadFunc(LPVOID lpParam) { int i = 0; while (i < 20) { printf("...
带你玩转Visual Studio——VC++的
多
线程
开发
编程思想之
多
线程
与多进程(4)——C++中的
多
线程
一文中讲了VC++的
多
线程
的用法和用例,本文接着这个话题作进一步的讲解:Suspend
Thread
和Re
sum
e
Thread
的用法,
线程
与同步锁的封装类,及VS中
多
线程
的调试。
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章