正规dll,在InitInstance()中开线程
AfxBeginThread(RUNTIME_CLASS(WatchThread));
线程执行后就死锁。怎么办?盼高手解答

解决方案 »

  1.   

    在dll初始化的时候不能开启线程,你可以export一个函数,在它里面create thread.然后由主程序调用
      

  2.   

    我需要在dll初始化是开线程,也就是在DLL_PROCESS_THREAD的时候就开线程。
    可以吗?因为我做的是一个远程注入,我的想法是把控制端把LoadLibrary和dll文件路径写入宿主进程,然后LoadLibrary我的dll。因此我需要在dll初始化时就可以开线程。
      

  3.   

    或许你可以在dll初始化时开启一个进程,让那个新开的进程稍后再CreateRemoteThread调用你的dll createthread.
      

  4.   

    to masterz() ( ) 
    加我qq好吗?在qq上请教比较方便。qq   249105822
      

  5.   

    在dll初始化的时候不能开启线程的。除非你先调用一个api, 好像是DisableThreadAttached之类的。
      

  6.   

    哦,找到了。是 DisableThreadLibraryCalls。使用这个就可以在 DLL_PROCESS_ATTACH 中创建线程了。
      

  7.   

    强烈建议看看windows 核心编程这本书!上面讲的非常清楚
      

  8.   

    to whoo(谁) ( )
    是 DisableThreadLibraryCalls。使用这个就可以在 DLL_PROCESS_ATTACH 中创建线程了。不行啊:(
    你看我这样对吗?
    CWatchApp::InitInstance()   //CWatchApp是用MFC向导建立的正规dll工程。
    {
       CString dllName//dll的路径
       ::GetModuleFileName(AfxGetApp()->m_hInstance,dllName.GetBufferSetLength  
                (MAX_PATH+1),MAX_PATH);
       dllName.ReleaseBuffer();
       int nPos=dllName.ReverseFind('\\');
       dllName=dllName.Left(nPos);
       dllName+="\\Watch.dll";   HMODULE dllModule=NULL;
       BOOL bOK=FALSE;
       dllModule=::GetModuleHandle(dllName);
       if(dllModule!=NULL)
          bOK=::DisableThreadLibraryCalls(dllModule);
       if(bOK)
          AfxBeginThread(RUNTIME_CLASS(WatchThread));  //WatchThread是我要开的线程。
    }测试程序只有一行代码:
    就是::LoadLibrary(dll);
    每次执行到开线程的地方,就死了。
      

  9.   

    to xiaohyy(醉大饿极) ( ) 
    只要保证初始化是线程安全的,在初始化时也可以开线程啊...不懂,什么意思。能解释一下吗?
      

  10.   

    >> bOK=::DisableThreadLibraryCalls(dllModule);DllModule 是本身Dll的Handle.不是其他的Dll.
      

  11.   

    to  whoo(谁) ( ) 
    >> bOK=::DisableThreadLibraryCalls(dllModule);DllModule 是本身Dll的Handle.不是其他的Dll.
    我的dllModule是本身Dll的Handle.我加载的就是Watch.dll,也是在Watch.dll初始化时调用
    Watch.dll的线程函数创建线程。
      

  12.   

    问题解决。
    dll初始化时可以创建函数。但是不能用mfc的AfxBeginThread。
    要用_beginthreadex就可以。谢谢以上各位的解答。