最近在用VC++编写一个视觉检测系统,其中开的线程比较多。知道线程什么时候结束是很重要的一个问题。其中用到了GetExitCodeThread()函数。函数原型如下:

   BOOL   GetExitCodeThread (
HANDLE hThread,
LPDWORD lpExitCode
);

其中,hThread,表示要查看的线程的句柄,lpExitCode是一个DWORD类型的指针,该指针是调用函数时传递进去以保存线程状态的。如果值未STILL_ACTIVE则表示线程未结束。

这个函数的返回值,和线程的状态没有任何关系。只是表示该函数是否执行成功;

我再使用该函数的时候遇到一个问题,线程已经结束了。我能确定线程里面有个循环,还循环已经不在执行了。但是用该函数获得的状态码一直是STILL_ACTIVE,实际上在编译器里面看的时候是259,转换成16进制就是STILL_ACTIVE。代码如下:

if ( m_pThreadVelocity )
{
DWORD dwExitCode = 0;
do
{
GetExitCodeThread(m_pThreadVelocity->m_hThread, &dwExitCode);
}
while( STILL_ACTIVE == dwExitCode );
m_pThreadVelocity = NULL;
}
m_pThreadVelocity = AfxBeginThread(fnVelocityAndMeterThread, &m_VelocityAndMeterThreadParam, THREAD_PRIORITY_TIME_CRITICAL);

一直不知道怎么解决,后来一次偶然的机会再GetExitCodeThread函数之前先把,dwExitCode初始化了一下,就变正常了。代码如下:

if ( m_pThreadVelocity )
{
DWORD dwExitCode = 0;
do
{
dwExitCode = 0;
GetExitCodeThread(m_pThreadVelocity->m_hThread, &dwExitCode);
}
while( STILL_ACTIVE == dwExitCode );
m_pThreadVelocity = NULL;
}
m_pThreadVelocity = AfxBeginThread(fnVelocityAndMeterThread, &m_VelocityAndMeterThreadParam, THREAD_PRIORITY_TIME_CRITICAL);
}

现在还不知道具体什么原因,可能是该函数内部给 lpExitCode赋值的时候不是简单的直接赋值。STILL_ACTIVE的值是一个((DWORD )0x00000103L) ,DWORD实际是unsigned char。STILL_ACTIVE的值实际上是16进制的。转化成10进制就是259。这里可能lpExitCode赋值不是简单的lpExitCode = xx之类的。所以每次执行完GetExitCode后需要重新初始化lpExitCode的值吧。

最新文章

  1. 如何在LIRE搜索中使用多特征
  2. php+mysql
  3. 利用Ramdisk为Firefox 加速
  4. haskell中的cps
  5. [ML] Naive Bayes for Text Classification
  6. 101个MySQL的调节和优化的Tips
  7. CSS预处理器实践之Sass、Less比较
  8. 基于Visual C++2013拆解世界五百强面试题--题12-进制转换
  9. C# 枚举在项目中使用心得
  10. Runc 简介
  11. django 创建model(数据库表)失败
  12. db2文件系统已满
  13. Web安全 概述
  14. ES8之async/await学习随笔
  15. Linux配置自动发送邮件
  16. HttpRunner接口自动化测试框架
  17. ssd a
  18. 16级第二周寒假作业H题
  19. django-cbv模式-csrf中间件
  20. re模块之research

热门文章

  1. BIgDecimal输出时添加金额分割符
  2. Linux文件系统之删除文件、文件夹(rm,rmdir)
  3. Navicat Premium 12连接mysql-8.0.15-winx64 出现2059异常
  4. BZOJ 1283: 序列 (最大费用流)
  5. JavaScript三元运算符
  6. React组件式编程Demo-用户的增删改查
  7. 【Python之路】特别篇--微信Web网页版通信的全过程分析
  8. hdu 5536 Chip Factory 字典树+bitset 铜牌题
  9. 使用horovod构建分布式深度学习框架
  10. CF1207A