如何将线程唤醒那?

wohkn 2006-01-20 05:42:17
用AfxBeginThread 开始一个线程后 在该线程中调用了sleep
如何将其唤醒那? 谢谢
...全文
411 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzzqqq 2006-01-23
  • 打赏
  • 举报
回复
ResumeThread
mme 2006-01-21
  • 打赏
  • 举报
回复
它都已经Sleep了,是主动让CPU资源给其它线程了,不可能唤醒的。

解决的方法:
(1)Sleep的时间少一点,比如
BOOL Exit = FALSE; // 这个定义为全局变量,可以由其它线程设置
for(int i=0; i<100; i++)
{
if(Exit == TRUE) break; // 在外部设置Exit的值,唤醒
Sleep(1000);
}

(2)使用状态量,比如事件等

jdzwq 2006-01-21
  • 打赏
  • 举报
回复
laiyiling(【CSDN●】) 说得对,WINDOWS的消息调度机制里,你不能确定线程何时运行,但可以抬高他的优先级别,让他优先得到运行
shootingstars 2006-01-21
  • 打赏
  • 举报
回复
如果是真正想“唤醒”或者“挂起”线程,可以使用下面两个函数:
DWORD ResumeThread(
HANDLE hThread
);

DWORD SuspendThread(
HANDLE hThread
);

你也可以在创建线程的时候传入CREATE_SUSPENDED标志,让这个线程暂不运行,直到你调用ResumeThread
shootingstars 2006-01-21
  • 打赏
  • 举报
回复
不要在线程中使用Sleep,这时候线程其实是醒着的,只不过它自己拒绝“工作”而已。
可以使用WaitForSingleObject等函数,等待某个信号量。
在想让这个线程工作的时候,激发这个信号量即可。
  • 打赏
  • 举报
回复
可否把你相關代碼發上來看一下
rageliu 2006-01-21
  • 打赏
  • 举报
回复
不然就sleep参数小点,到时间自己开始工作.
也可以用WaitForsingleObject()
Kudeet 2006-01-20
  • 打赏
  • 举报
回复
先用SetThreadPriority提高线程的优先级,然后用SwitchToThread()

15,466

社区成员

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

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