在DLL中,我希望在DllMain的DLL_PROCESS_ATTACH时创建一个线程并等待其完成, 请问各位大侠, 有没有什么解决办法?DWORD WINAPI ThreadProc(
  LPVOID lpParameter   // thread data
)
{
MessageBox(0, 0, 0, 0);
return 0;
}BOOL WINAPI DllMain(
  HINSTANCE hinstDLL,  // handle to DLL module
  DWORD fdwReason,     // reason for calling function
  LPVOID lpvReserved   // reserved
)
{
  HANDLE hThread;
  switch(fdwReason)
  {
    case DLL_PROCESS_ATTACH:
       hThread = CreateThread(0, 0, ThreadProc, 0, 0, &dwThreadId);
       // 我希望等待hThread这个线程执行完
        WaitForSingleObject(hThread, -1);// 这个方法不行, 有没有好的方法
       break;
    defualt:
       break;
    return TRUE;
  }

解决方案 »

  1.   

    你的那个方法应该也可以吧~~
    要么利用GetExitCodeProcess函数试试
      

  2.   

    是个死锁哦!
    楼主别忘了创建新线程的时候系统也会调用dll的DllMain,并向其传递DLL_THREAD_ATTACH
    再加上系统是顺序调用DllMain函数的
    主线程创建新线程后,新线程会被挂起,等待主线程执行DllMain完毕,而此时的DllMain由于
    WaitForSingleObject而等待新线程的结束,死锁!
    所以要避免在DllMain里使用WaitForSingleObject
      

  3.   

    确实是死锁,因为CreateThread产生新线程时,会调用DllMain,但这个函数会停住,解决方法似乎没,你这个例子倒可以作为死锁的经典例题了。
      

  4.   

    不好意思,google了一下,确实有人提过, 结贴.