WaitForSingleObject和CreateThread在dll中的初始化里运行的问题,急!!!!!!
qjipa 2007-05-12 01:52:36 DWORD WINAPI NewThreadProc(LPVOID params)
{
long aa=0;
while (aa!=499999999){ //占用一定的CPU时间来运行线程
aa=aa+1;
}
return 0;
}
DWORD WINAPI ThreadProc(LPVOID params)
{
DWORD p;
HANDLE gThread;
gThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&NewThreadProc, NULL,0 ,&p);
WaitForSingleObject(gThread,INFINITE); //但这里却返回0(成功),用户界面也有响应
CloseHandle(gThread);
return 0;
}
DWORD WINAPI StartThread(){
DWORD p;
HANDLE hThread;
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&ThreadProc,NULL,0,&p);
//WaitForSingleObject(hThread,INFINITE); //不知道为什么这里总是返回WAIT_TIMEOUT,而且如果用了这个函数,用户界面就无响应了
CloseHandle(hThread);
return 0;
}
extern "C"
BOOL WINAPI DllMain( HANDLE hModule,
DWORD reason,
LPVOID lpReserved
)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
{
StartThread();
return true;
}
case DLL_PROCESS_DETACH:
{
return true;
}
default:
return true;
}
}
这个是我要写的一个dll,我需要在dll初始化的DLL_PROCESS_ATTACH中就开启线程
而且这个dll在动态调用后而且执行完DLL_PROCESS_ATTACH就要马上用FreeLibrary在宿主进程中卸载,但卸载dll时
宿主进程就自动出现错误报告,然后退出了,我找到原因是运行FreeLibrary时NewThreadProc仍然在执行,这时出错了
但我想要在NewThreadProc完成后再FreeLibrary,有什么办法吗??????
还有StartThread函数里面用CreateThread创建线程,如果用WaitForSingleObject,根本就无响应
而且无法创建线程ThreadProc,但如果StartThread里不用WaitForSingleObject,再创建一个线程ThreadProc,这里的WaitForSingleObject又可以响应了
不过那时就出现了上面的问题了……
各位牛人,刚学VC,可能语法有错误,希望能帮助一下,谢谢了!!!!!!!!