怎样判定一个线程正在工作而未空闲?

gxhxue 2007-08-01 08:28:35
谢谢,请详细介绍!
...全文
443 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cayido 2007-08-01
  • 打赏
  • 举报
回复
空闲处理是MFC UI线程的东西
你可以重写UI线程的 ONIDLE函数 如果空闲的话就会执行ONIDLE

从MFC 继承 CWINTHREAD 类既可

如果在WIN32中,请先建立消息环
然后PEEKMESSEGE 如果没系统消息就执行IDLE
gxhxue 2007-08-01
  • 打赏
  • 举报
回复
那个lpExitCode都有几种返回值?
罗嘉贇 2007-08-01
  • 打赏
  • 举报
回复
理论上除了这个线程亲自告诉你,没有其他的方法。
BOOL GetExitCodeThread(
HANDLE hThread, // handle to the thread
LPDWORD lpExitCode // address to receive termination status
);
只能告诉你线程是否结束,但是如果线程正在等待一个资源,他很可能处于空闲。当然如果你的机器里有两个cpu你可以知道一个线程的运行状态。利用cpu时间。
feilonghai 2007-08-01
  • 打赏
  • 举报
回复
BOOL GetExitCodeThread(
HANDLE hThread, // handle to the thread
LPDWORD lpExitCode // address to receive termination status
);
lpExitCode == STILL_ACTIVE代表线程在工作
WizardK 2007-08-01
  • 打赏
  • 举报
回复
我不知道ddpx对于你来说仅仅是个线程的状态标志还是外部给线程的运行标志,所以第一个回答不一定符合你的情况
WizardK 2007-08-01
  • 打赏
  • 举报
回复
第一个问题:不需要加锁,因为除了线程以外,其他的都是读取操作
第二个问题:WaitForSingleObject未返回时是处于空闲状态的
gxhxue 2007-08-01
  • 打赏
  • 举报
回复
比如发送数据线程,当没有数据发送时,全局变量ddpx=0;既为空闲状态,当有数据发送时,ddpx=1,现在有两个问题,
(1):当在发送线程内修改ddpx时,是不是需要对ddpx进行加锁?为什么?
(2):当调用WaitForSingleObject()函数未处于信号态时,是不是该线程就是处于空闲状态?
WizardK 2007-08-01
  • 打赏
  • 举报
回复
怎么算正在工作?谁去做这个判定?
执行你的算法时算是工作?等待开始执行下一个循环时算是空闲?

这样的话你自己加标志不就可以了嘛?

15,471

社区成员

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

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