如何获得线程程的状态

云满笔记 2013-04-10 03:13:41
我用_beginthreadex开辟了一个线程,设置了一个标志位bStart,如下形式
while (bStart)
{
...
Sleep(100);
}
可是当条件不满足时(设置bStart为false),然后我用GetExitCodeThread获取到的总是STILL_ACTIVE,这是为什么呀?
...全文
118 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
云满笔记 2013-04-11
  • 打赏
  • 举报
回复
其实WTL属于VC,说它属于VC/MFC版块也不怎么错
云满笔记 2013-04-11
  • 打赏
  • 举报
回复
引用 12 楼 fengqinqdca 的回复:
在MFC里面 开线程为什么不适用AfxBeiginThread呢?以前几个人用CreateThread和_beginthreadex来开线程 我感觉很不爽啊,代码风格保持一致吧。这是我的习惯
我用的是WTL,它没有微软官方MSDN支持,也不被CSDN支持,连个WTL版块都没有所以只好发到这里了
华美乐章 2013-04-11
  • 打赏
  • 举报
回复
在MFC里面 开线程为什么不适用AfxBeiginThread呢?以前几个人用CreateThread和_beginthreadex来开线程 我感觉很不爽啊,代码风格保持一致吧。这是我的习惯
华美乐章 2013-04-11
  • 打赏
  • 举报
回复
引用 9 楼 wan212000 的回复:
引用 8 楼 fengqinqdca 的回复: GetExitCodeThread这个不能满足你的需求吗? GetExitCodeThread可以判断线程的存在,你在仔细看看代码的逻辑不行啊 我线程明明关了它都返回STILL_ACTIVE 这让我非常郁闷
看看你的代码,我使用没有问题 DWORD dwExitCode=0; ::GetExitCodeThread(pXXthread.ThreadHandle,&dwExitCode); if (dwExitCode==STILL_ACTIVE) { return TRUE; } else return FALSE; 注意变量的作用域啊.
云满笔记 2013-04-11
  • 打赏
  • 举报
回复
关键我用的是_beginthreadex开辟的线程,不知道对此有没有什么影响
云满笔记 2013-04-11
  • 打赏
  • 举报
回复
引用 8 楼 fengqinqdca 的回复:
GetExitCodeThread这个不能满足你的需求吗? GetExitCodeThread可以判断线程的存在,你在仔细看看代码的逻辑
不行啊 我线程明明关了它都返回STILL_ACTIVE 这让我非常郁闷
华美乐章 2013-04-11
  • 打赏
  • 举报
回复
GetExitCodeThread这个不能满足你的需求吗? GetExitCodeThread可以判断线程的存在,你在仔细看看代码的逻辑
无言猪 2013-04-11
  • 打赏
  • 举报
回复
if (WAIT_OBJECT_0 != WaitForSingleObject(h, 2000))
TerminateThread(h);
云满笔记 2013-04-11
  • 打赏
  • 举报
回复
引用 5 楼 VisualEleven 的回复:
引用 楼主 wan212000 的回复:我用_beginthreadex开辟了一个线程,设置了一个标志位bStart,如下形式 while (bStart) { ... Sleep(100); } 可是当条件不满足时(设置bStart为false),然后我用GetExitCodeThread获取到的总是STILL_ACTIVE,这是为什么呀? ……
是的 怎么办啊 我只想当我按下关闭按钮时(标志位置false,按理来说循环条件不满足要break了,可是我有的线程有较长时间的Sleep)检测某线程的工作状态 ,给它2秒钟时间退出,若它还不退出,则强行关闭它
Eleven 2013-04-11
  • 打赏
  • 举报
回复
引用 楼主 wan212000 的回复:
我用_beginthreadex开辟了一个线程,设置了一个标志位bStart,如下形式 while (bStart) { ... Sleep(100); } 可是当条件不满足时(设置bStart为false),然后我用GetExitCodeThread获取到的总是STILL_ACTIVE,这是为什么呀? 多线程 进程 系统编程 进程状态 STILL_ACTIVE
当bStart的时候,你的线程估计还没有return返回,你就调用了GetExitCodeThread函数了吧
云满笔记 2013-04-11
  • 打赏
  • 举报
回复
引用 1 楼 lhfslhfs 的回复:
用GetCurrentThread得到当前线程的伪句柄,然后利用这个伪句柄调用GetThreadPriority,GetThreadTimes之类的函数就可以得到当前线程的信息
我只要得到线程是否正在运行就可以了 怎么做
云满笔记 2013-04-11
  • 打赏
  • 举报
回复
引用 2 楼 lostying 的回复:
如果线程句柄为h,先C/C++ code?1WaitForSingleObject(n, INFINITE); 再用 GetExitCodeThread 去取.
为什么
无言猪 2013-04-10
  • 打赏
  • 举报
回复
如果线程句柄为h,先
WaitForSingleObject(n, INFINITE);
再用 GetExitCodeThread 去取.
青松2 2013-04-10
  • 打赏
  • 举报
回复
用GetCurrentThread得到当前线程的伪句柄,然后利用这个伪句柄调用GetThreadPriority,GetThreadTimes之类的函数就可以得到当前线程的信息

15,471

社区成员

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

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