dll中WaitforSingleObject的相关有关问题

dll中WaitforSingleObject的相关问题
我在DLLMAIN中写道:
switch   (ul_reason_for_call)
{
case   DLL_PROCESS_ATTACH:
case   DLL_THREAD_ATTACH:
if   (!Loaded)   {
hEvent1=   CreateEvent(NULL,FALSE,TRUE,NULL);
Loaded=TRUE;
}
break;
case   DLL_PROCESS_DETACH:
case   DLL_THREAD_DETACH:
if   (Loaded)   {
CloseHandle(hEvent1);
Loaded=FALSE;
}
break;
}
DLL接口函数中有WaitForSingleObject的一些语句.如WaitForSingleObject(hEvent1,2000)
之后我使用vb调用该DLL的这些接口函数,结果有时会等待失败(不是超时)。请问会不会是无意间调用了DLL_THREAD_DETACH?另外我该怎么改呢?

------解决方案--------------------
http://blog.csdn.net/guke1978_123/archive/2006/03/16/625773.aspx
------解决方案--------------------
最好不要在DLL_THREAD_ATTACH做CreateEvent等和内核对象有关的操作,有时会出现一些奇怪的问题。比较好的解决办法是导出一个初始化函数,比如Init等,让调用者去调用。
------解决方案--------------------
并不是每次LoadLibrary的时候都会调用DllMain的