如果线程句柄已经正常关闭,但是由于疏忽没有将句柄m_hSendOneKey置为 NULL,从而导致 if(m_hSendOneKey != NULL)
{
TerminateThread(m_hSendOneKey,0);
CloseHandle(m_hSendOneKey);
m_hSendOneKey = NULL;
}这段程序运行。那么会引起什么错误呢?由于在测试时程序不是每次都会出现错误,只是偶尔出现死掉的情况。经检测上面的情况最值得怀疑,但是无法确定,想让高手分析分析,以便把这个问题彻底解决掉。

解决方案 »

  1.   

    使用GetExitCodeThread检测一下线程句柄m_hSendOneKey的状态。
    如果线程m_hSendOneKey正在运行返回STILL_ACTIVE,否则返回0
    如果返回0,使用GetLastError检测一下错误类型,是否为无效句柄
      

  2.   

    TerminateThread()太暴力,能不用最好不用
      

  3.   


    不设置为NULL,执行可能崩溃
      

  4.   

    一般线程正常退出的话我是不会用的,只是疏忽忘记将句柄置为NULL。现在问题出现不是十分确定是否就是TerminateThread()引起的问题
      

  5.   

    TerminateThread无效的句柄不会有什么问题,但是如果这个句柄号后面又被用作另一个线程句柄就有问题了
      

  6.   

    3#  不设置为NULL,执行可能崩溃 确实是崩溃了,引起的原因是否就是5楼回答的一样?那崩溃十之八九就是这个问题引起的。以后得注意注意,刚开始我还是以为是写文件引起的错误
      

  7.   

    建议无论什么情况都别使用这个API,因为是导致很多东西都不可控,还是从优化代码的角度来解决这个问题吧