Esempio n. 1
0
HRESULT DHContext::HostWait(HANDLE hWait, DWORD dwMilliseconds, DWORD dwOption)
{
    DWORD dwWaitResult;
    BOOL bAlertable = dwOption & WAIT_ALERTABLE;

    if (dwOption & WAIT_MSGPUMP)
    {
        dwWaitResult = CoWaitForMultipleHandles(
            bAlertable ? COWAIT_ALERTABLE : 0, dwMilliseconds, 1, &hWait, NULL);
    }
    else
    {
        dwWaitResult = WaitForSingleObjectEx(hWait, dwMilliseconds, bAlertable);
    }

    switch (dwWaitResult)
    {
        case WAIT_OBJECT_0:
            return S_OK;
        case WAIT_ABANDONED:
            return HOST_E_ABANDONED;
        case WAIT_IO_COMPLETION:
            return HOST_E_INTERRUPTED;
        case WAIT_TIMEOUT:
            return HOST_E_TIMEOUT;
        case WAIT_FAILED:
            _ASSERTE(!"*WaitForSingleObjectEx failed");
            return HRESULT_FROM_WIN32(GetLastError());
        default:
            _ASSERTE(!"unexpected return value");
            return E_FAIL;
    }
}
Esempio n. 2
0
HRESULT infinite_cowait(HANDLE hndl)
{
    DWORD wr;
    HRESULT hr = CoWaitForMultipleHandles(COWAIT_WAITALL, INFINITE, 1,
                                          &hndl, &wr);
    if (wr != WAIT_OBJECT_0 || FAILED(hr))
    {
        DBGLOG(L"event wait failed" << hr);
        hr = E_FAIL;
    }
    return hr;
}
Esempio n. 3
0
HRESULT zero_cowait(HANDLE hndl)
{
    DWORD wr;
    HRESULT hr = CoWaitForMultipleHandles(COWAIT_WAITALL, 0, 1, &hndl, &wr);
    if (SUCCEEDED(hr) && WAIT_OBJECT_0 == wr)
    {
        hr = S_OK;
    }
    else
    {
        hr = E_FAIL;
    }
    return hr;
}
//wait for the ConnectSucceeded or ConnectFailed call back to get called
HRESULT WcnConnectNotification::WaitForConnectionResult()
{
	HRESULT hr = S_OK;

	DWORD dwIndex = 0;
	hr = CoWaitForMultipleHandles(
									COWAIT_WAITALL, 
									CONNECT_TIME_OUT, 
									1, 
									&connectEndEvent, 
									&dwIndex);
	
	if (hr == S_OK && dwIndex == 0)
	{
		ResetEvent(connectEndEvent);
	}
	else
	{
		wprintf(L"\nDiscovery timeout (after waiting %ums).", CONNECT_TIME_OUT);
	}

	return hr;
}