Exemplo n.º 1
0
DWORD WaitForMultipleObjectsWithMessageLoop(DWORD dwHandles, HANDLE szHandles[], DWORD dwMilliseconds, DWORD dwWakeMask, DWORD dwFlags)
{
	DWORD dwResult		= WAIT_FAILED;
	DWORD dwBeginTime	= (dwMilliseconds == INFINITE) ? INFINITE : ::timeGetTime();

	while(TRUE)
	{
		int iWaitTime;
		if(dwBeginTime != INFINITE)
		{
			iWaitTime	= dwMilliseconds - (::timeGetTime() - dwBeginTime);

			if(iWaitTime <= 0)
			{
				dwResult = WAIT_TIMEOUT;
				break;
			}
		}
		else
			iWaitTime	= INFINITE;

		dwResult = ::MsgWaitForMultipleObjectsEx(dwHandles, szHandles, iWaitTime, dwWakeMask, dwFlags);
		ASSERT(dwResult != WAIT_FAILED);

		if(dwResult == (WAIT_OBJECT_0 + dwHandles))
			PeekMessageLoop();
		else
			break;
		
	}

	return dwResult;

}
Exemplo n.º 2
0
void CMirrorDlg::MsgWaitForNotification()
{
	DWORD dwRet;
	HANDLE hObject[2];
	hObject[0] = (HANDLE)m_workThread;
	hObject[1] = m_hSyncEvent;
	do
	{
		dwRet = ::MsgWaitForMultipleObjects(2, hObject, FALSE, 
			INFINITE, QS_ALLINPUT);
		if ( dwRet == WAIT_OBJECT_0 || dwRet == WAIT_FAILED )
		{
			DispathNotification();
			break;
		}
		else if ( dwRet == WAIT_OBJECT_0 + 1)
		{
			// Get notification
			DispathNotification();
		}
		else if ( dwRet )
		{
			PeekMessageLoop();
		}
	} while (TRUE);
}