线程偶尔会被被意外的挂起了,请问有那些调试,跟踪的方法吗?挂起后有什么回调触发或通知什么的呢?
我简单分析了下:
1.可能是在其他地方调用了挂起,但整个程序中只有一个 SuspendThread,并且已经加了调试输出。可能不是这里引起
2.线程之间的冲突导致(这个不能确定)?
3.会不会其他进程干涉,挂起,如杀入软件等?
以上只是个人猜想,请大家帮忙分析分析。

解决方案 »

  1.   

    Hook掉SuspendThread,在这里打印出当前的线程上下文和寄存器的值,然后对照着看。
      

  2.   

    尝试用SetPriorityClass来提升优先级看看
      

  3.   

    打印Log看看,这个被挂起的线程,是在程序运行的何处的时候,挂起的。如果,线程不多,可以考了只运行必要的线程。停掉其他。看看这个被挂起的线程是否还会受到影响。另外再分析一下,有没有可能是出现了死锁,导致线程等待而不运行了。或者线程异常,自己挂掉了。
      

  4.   

    我先HOOK  SuspendThread 试试,坐等问题再次发送  - -!
      

  5.   

    打印debug信息 然后跑一下看输出