首先这么一个状况
一个线程运行着一个函数,然后这个函数调用了Wait***系列函数
或者是调用了一些会让线程阻塞的锁
那么有什么办法让另外一个线程检测到这个行为吗?
被调用的那个函数并不知道会有这么一个检测/////////伪代码
void thread_func()
{
........调用了一些函数导致线程被锁住
}void thread_func_check()
{
//这个函数拥有另外一个线程的句柄之类的东西
//想要检测到线程的阻塞
}
PS:(总感觉这个问题已经有人问过了)

解决方案 »

  1.   

    /////////伪代码
     void thread_func()
     {
    //也就是说进入这个函数必定阻塞?如果是这样的话可以在这里SetEvent(或其他的 信号量 互斥等)
     ........调用了一些函数导致线程被锁住  
     }
     
    void thread_func_check()
     {
    //这里就WaitForSingleObject(无限等待) 只有上面进入SetEvent这里就返回
     //这个函数拥有另外一个线程的句柄之类的东西
     //想要检测到线程的阻塞
     }
      

  2.   

    我指的是这个thread_func不知道有人检测这个函数,他只会运行而已
      

  3.   

    我觉得可以定义一个全局的结构体变量数组,结构体成员是线程句柄与线程状态,然后某个线程的状态将要改变的时候,比如你调用Sleep之前你就可以将结构体变量中标识线程状态的成员设置成一个表示线程阻塞的值,然后你想获取线程状态时就可以直接读这个全局变量了。愚见,仅供参考。
      

  4.   

    可以看一下Wait Chain Traversal 系列的函数,但要在vista以上的OS才能使用。
    其功能能检测进程(任何进程)的线程的句柄的等待状态
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms681622(v=vs.85).aspx
    在《windows via c++》中有介绍且有源码, 名字好像叫LockCop,是检测死锁的绝佳工具。