在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;
}
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;
}
解决方案 »
- Windows 7 弹出系统菜单不正常(IContextMenu相关),求大神指教
- 第二次进入线程后,程序出错!请各位高手指点
- 关于VC6.0++网上版本和光盘安装问题
- 怎样使用编译选项来消除这个编译时的类型错误?
- 在.dll相应的.h中_declspec(dllimport)有没有都可以,这个指示符什么作用?
- 各位大侠:完成端口的问题~~~~
- 请教CreateFileMapping的问题
- 使用adodc控件中遇到的问题,劳驾看一看
- 我是解决不了了,不过肯定有人能做到,是谁呢?进来看看就知道了!
- 送分:vc中怎么做象手表那样的有表针的表?????
- 如何用VC来编写在局域网中访问SQL。。
- 再问动态加载驱动程序的问题
要么利用GetExitCodeProcess函数试试
楼主别忘了创建新线程的时候系统也会调用dll的DllMain,并向其传递DLL_THREAD_ATTACH
再加上系统是顺序调用DllMain函数的
主线程创建新线程后,新线程会被挂起,等待主线程执行DllMain完毕,而此时的DllMain由于
WaitForSingleObject而等待新线程的结束,死锁!
所以要避免在DllMain里使用WaitForSingleObject