void CExeModule::MonitorShutdown() { #if 1 WaitForSingleObject(hEventShutdown, INFINITE); #if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED) CoSuspendClassObjects(); #endif #else while (1) { WaitForSingleObject(hEventShutdown, INFINITE); DWORD dwWait=0; do { bActivity = false; dwWait = WaitForSingleObject(hEventShutdown, dwTimeOut); } while (dwWait == WAIT_OBJECT_0); //-- timed out if (!bActivity && m_nLockCnt == 0) { // if no activity let's really bail #if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED) CoSuspendClassObjects(); if (!bActivity && m_nLockCnt == 0) #endif break; } } #endif CloseHandle(hEventShutdown); CloseHandle(hMonitorThread); #ifdef _DEBUG PlaySound("chimes.wav",NULL,SND_FILENAME|SND_ASYNC); #endif PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); }
//Monitors the shutdown event void CExeModule::MonitorShutdown() { while (1) { WaitForSingleObject(hEventShutdown, INFINITE); DWORD dwWait=0; do { bActivity = false; dwWait = WaitForSingleObject(hEventShutdown, dwTimeOut); } while (dwWait == WAIT_OBJECT_0); // timed out if (!bActivity && m_nLockCnt == 0) // if no activity let's really bail { #if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED) CoSuspendClassObjects(); if (!bActivity && m_nLockCnt == 0) #endif break; } } CloseHandle(hEventShutdown); PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); }
/*---------------------------------------------------------------------------------------------- For an exe, we post a WM_QUIT message to the main thread when the module reference count goes to zero. ----------------------------------------------------------------------------------------------*/ long ModuleEntry::ModuleRelease(void) { long ln = InterlockedDecrement(&s_crefModule); if (!ln) { if (CoSuspendClassObjects() == S_OK) PostThreadMessage(s_tid, WM_QUIT, 0, 0); } return ln; }
LONG CExeModule::Unlock() { LONG l = CComModule::Unlock(); if (l == 0) { if (CoSuspendClassObjects() == S_OK) PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); } return l; }
void CExeModule::MonitorShutdown() { WaitForSingleObject(hEventShutdown, INFINITE); #ifdef _ATL_FREE_THREADED CoSuspendClassObjects(); #endif CloseHandle(hEventShutdown); CloseHandle(hMonitorThread); #ifdef _DEBUG PlaySound(_T("chimes.wav"),NULL,SND_FILENAME|SND_ASYNC); #endif PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); }
LONG CExeModule::Unlock() { DWORD dwCurrentThread = ::GetCurrentThreadId(); LONG l = CComModule::Unlock(); if (l == 0) { #if _WIN32_WINNT >= 0x0400 if (CoSuspendClassObjects() == S_OK) PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); #else PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); #endif } return l; }