我写了一个DLL,在载入此DLL的同时会打开一个子线程(子线程的程序在此DLL中),此子线程一直要到此DLL卸载的时候才结束。卸载此DLL之后,进程继续运行。我卸载DLL的时候总是出错,最后检查下来估计是在卸载DLL的时候,那线程还在运行导致的。我是用FreeLibrary卸载DLL。在调用FreeLibrary之前,无法关闭子线程。请问,用什么办法可以正确的卸载此DLL麽?
编程环境是:VC++.NET 2003建立的dll项目是:MFC DLL
编程环境是:VC++.NET 2003建立的dll项目是:MFC DLL
然后卸载线程等待子线程退出 WaitForSingleObject
最后卸载
不过呢,强行的结束thread会导致一些资源无法释放掉.
直接点窗口上边的叉,窗口也是接收到一个WM_CLOSE消息,但是为什么直接点上边的叉能关闭,卸载DLL的时候向窗口发送WM_CLOSE消息就关闭不了呢?
HANDLE g_hThread=NULL;BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
UINT nThreadId;
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
g_lFlag=0;
g_hThread=_beginthreadex(NULL,0,ThreadFunc,NULL,0,&nThreadId);
break;
......
case DLL_PROCESS_DETACH:
g_lFlag=1;
WaitForSingleObject(g_hThread,INFINITE);
CloseHandle(g_hThread);
g_hThread=NULL;
g_lFlag=0;
break;
}
return TRUE;
}UINT WINAPI ThreadFunc(PVOID pvParam)
{
......
while(g_lFlag!=1)
{
......
}
......
return 0;
}