MFC中線程掛起方法

来源:互联网 发布:Tomcat不用绑定域名 编辑:程序博客网 时间:2024/06/07 17:06
 
发表于:2004-05-14 14:08:59
  • yujianru
  • (飞鸟)
  • 等 级:
  • 结帖率:
楼主发表于:2004-05-14 14:08:59
实现如下功能: 
有两线程一为界面线程,另一为工作线程。 
界面上有两按钮为开始,和停止。 
按一下停止就阻塞工作线程,按一下开始就换醒工作线程。
  
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
回复次数:10
  • lianglp用户头像
  • lianglp
  • (lianglp)
  • 等 级:
#1楼 得分:0回复于:2004-05-14 14:26:16
如果知道线程ID   
HANDLE   hThread   =   ::OpenThread(...)   ; 
::SuspendThread(hThread)   ;//挂起线程 
::ResumeThread(hThread)   ;//唤醒线程
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:散分:输入法终结者
  • ckp用户头像
  • ckp
  • (surge)
  • 等 级:
#2楼 得分:0回复于:2004-05-14 15:01:37
同意lianglp()   (   )
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:作战理论入门[日]陆上自卫队修(带链接)
  • yujianru用户头像
  • yujianru
  • (飞鸟)
  • 等 级:
#3楼 得分:0回复于:2004-05-14 16:33:50
好象不起什么作用。。 

SupendThread   后线程没有停止执行。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:笑口常开 健康永驻(2009-3-10)
  • dhbo用户头像
  • dhbo
  • (沉默的石头)
  • 等 级:
#4楼 得分:0回复于:2004-06-07 09:25:13
可以的
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:联邦调查局档案(美)凯恩·博斯特尔(带链接)
  • force_eagle用户头像
  • force_eagle
  • (战鹰)
  • 等 级:
#5楼 得分:0回复于:2004-06-07 11:11:30
SupendThread   不行??????? 

那就用事件控制吧!!!!!!!!!!!!!
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:发布一个C++网络开发工具包 - netkit测试版
  • wwwsq用户头像
  • wwwsq
  • (wwwsq)
  • 等 级:
#6楼 得分:0回复于:2004-06-08 11:20:51
SuspendThread   应该没问题的,检查一下SuspendThread是否执行成功。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • nightsuns用户头像
  • nightsuns
  • (nightsuns)
  • 等 级:
#7楼 得分:0回复于:2004-06-09 13:17:34
有一个偏门 
线程A有一个窗口循环,线程B向它sendmessage, 
而线程A处理这个消息不返回,这样线程B就会被阻塞!
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • LeLeGhost用户头像
  • LeLeGhost
  • (禅师)
  • 等 级:
#8楼 得分:0回复于:2004-06-09 14:54:53
用   CreateMutex   生成一个互斥量. 
阻塞的地方用   WaitForSingleObject   等候信号量,用   ReleaseMutex   和来控制信号量. 
具体可以到   MSDN   中查找   WaitForSingleObject   的用法
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • madhappy用户头像
  • madhappy
  • (545454)
  • 等 级:
#9楼 得分:0回复于:2004-06-09 23:50:03
HANDLE   hThread   =   ::OpenThread(...)   ; 
::SuspendThread(hThread)   ;//挂起线程 
::ResumeThread(hThread)   ;//唤醒线程 
------------------------------------- 
你在mfc中调用以上代码是不起作用的 

这样启动线程: 
CWinThread*   Thread=AfxBeginThread(ThreadProc,NULL); 
挂起线程: 
TrainThread-> SuspendThread(); 
唤醒线程: 
TrainThread-> ResumeThread(); 

另外这两个挂起唤醒线程函数返回一个DWORD的值,可以看到线程状况。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • LavaFlow用户头像
  • LavaFlow
  • (LavaFlow)
  • 等 级:
#10楼 得分:0回复于:2004-06-10 00:51:55
OpenThread是2000后的函数,98下不起作用。如果2000下工作不正常的话,OpenThread的参数是不是传的有效句柄。

madhappy的方法是可以,俺也有个问题,如何停止一个从toolhelp枚举出来的thread呢,如果要求在98下也能工作的话?Jeffrey的书里没说,俺一直没想出办法来。
原创粉丝点击