我dll在启动时创建了一个线程,然后当这个dll触发DLL_PROCESS_DETACH消息后(就是主进程要退出了),我试图去关闭线程(方式是在处理DLL_PROCESS_DETACH消息附近修改一个变量,然后等线程检测到这个变量后自己返回),结果这个线程一直无响应。如我所问,什么情况呢??

解决方案 »

  1.   

    还不如让线程响应DLL_THREAD_DETACH
      

  2.   

    理解错了,你在DLL_PROCESS_DETACH是否等待那个线程结束
      

  3.   

    你在process detach是否等待那个线程
      

  4.   


    没有,而是无限Sleep(),直到线程收到响应才会停止。
      

  5.   

    不要在dll的DllMina里做,可能会产生循环依赖。试试在其它地方
      

  6.   


    估计就是不能在dllmain里面等待了,我已经查到有人这么说了:
    不能再DLL_PROCESS_DETACH收到的时候终止线程,因为其他系统的dll也收到了这个通知,并且完成了清除工作
      

  7.   

    windows核心上将的很好,不要再attach开线程,不要detach做等待相关的事情。
      

  8.   

    在 dll 中,另外定义一个输出接口 xxxUnload() 在软件退出的时候,调用一下,在这个接口里面关闭你创建的线程,尽量不在 DllMain 中做与线程相关的事情