我开发了一个DLL库, 库里边会创建几个线程,
退出时主线程会先依次发送QUIT消息给各个线程.例如先发送QUIT消息给线程1, 然后调用GetExitCodeThread获取线程1是否已经退出.
然后再发送QUIT消息给线程2, 以此类推,直到所有的线程都退出.这个普通应用程序上调用,完全没问题.现在的问题是.在ActvieX插件调用我这个DLL库时,在退出的时候,
在ExitInstance函数里,调用该库的反初始化接口.发现卡住了, 在调用GetExitCodeThread获取线程的状态时, 一直是STILL_ACTIVE.
但我通过断点,可以确认该线程已经调用"return 0"了.然后我在"线程"列表窗口里查看,发现该线程的确是没有完全退出,
正处于"ntdll.dll 7c92e514"的位置,而且还发现有好多进程都处理该位置.有谁知道这种怎么回事吗?

解决方案 »

  1.   

    你是通过消息让线程退出的?
    消息发出去没?
    换成event吧
      

  2.   

    已经发出去了,那个线程也可以调用return退出了.但不知道为什么实际并没退出而是一直处于"ntdll.dll 7c92e514"的位置
      

  3.   

    用windbg生成个dump.看看有没有死锁。
      

  4.   

    如上图所示,CamerasVideoThreadProc就是要想要退出的线程
    单步调试可以发现,已经调用了return语句
    但就是一直退不出来.
    用GetExitCodeThread获取它的状态时, 一直是STILL_ACTIVE.
      

  5.   

    最近进展刚刚把线程里的return 0换为ExitThread(0).直接就卡在这个函数里出不来了.而return 0应该就是有隐性调用ExitThread...难道不能在ExitInstance里调用ExitThread
      

  6.   

    接楼上的...最后一句错了...应该是难道主进程进ExitInstance后,别的进程就不能再调用ExitThread了?
      

  7.   

    难道主线程进ExitInstance后,别的线程就不能再调用ExitThread了?
      

  8.   

    吼吼,这么复杂?
    不要调wait函数
    移除摄像头回调之后马上退出,别管他是不是真的退了
    如果工程里面有定义了全局的变量在线程里面使用了也可能会造成影响
    试试disable动态库的attach消息
      

  9.   

    另外请问:camera的线程是你自己创建的?好奇怪
      

  10.   

    问题解决,是DllMain独占导致死锁引起的.