コード例 #1
0
ファイル: ndasix.cpp プロジェクト: JanD1943/ndas4windows
DWORD
CNdasIXBcast::ThreadStart(HANDLE hStopEvent)
{
	if (0 == m_NDFSVersion.wMajor && 0 == m_NDFSVersion.wMinor)
	{
		return 1;
	}

	HANDLE waitHandles[] = { 
		hStopEvent, 
		m_sockAddrChangeNotifier.GetChangeEvent()};
	const DWORD nWaitHandles = RTL_NUMBER_OF(waitHandles);

	// CTask::Initialized called?
	XTLASSERT(NULL != waitHandles[0]);
	// m_sockAddrChangeNotifier is initialized?
	XTLASSERT(NULL != waitHandles[1]);

	//
	// Initial bind
	//
	ResetBind(hStopEvent);

	//
	// initial LPX socket address list is attained
	//
	DWORD dwTimeout = 1000; // broadcast interval
	while (TRUE) 
	{
		DWORD waitResult = ::WaitForMultipleObjects(
			nWaitHandles, waitHandles, FALSE, dwTimeout);

		if (WAIT_OBJECT_0 == waitResult) 
		{
			return 0;
		}
		else if (WAIT_OBJECT_0 + 1 == waitResult) 
		{
			// reset bind
			ResetBind(hStopEvent);
		}
		else if (WAIT_TIMEOUT == waitResult) 
		{
			BroadcastStatus();
		}
		else 
		{
			XTLTRACE2(NDASSVC_IX, TRACE_LEVEL_ERROR,
				"WaitForMultipleObject failed, waitResult=%d.\n", waitResult);
			XTLASSERT(FALSE);
		}
	}
}
コード例 #2
0
ファイル: ndasix.cpp プロジェクト: yzx65/ndas4windows
DWORD
CNdasIXBcast::OnTaskStart()
{
	if (0 == m_NDFSVersion.wMajor && 0 == m_NDFSVersion.wMinor)
	{
		return 0;
	}

	HANDLE hEvents[2];
	hEvents[0] = m_hTaskTerminateEvent;
	hEvents[1] = m_sockAddrChangeNotifier.GetChangeEvent();

	// CTask::Initialized called?
	_ASSERTE(NULL != hEvents[0]);
	// m_sockAddrChangeNotifier is initialized?
	_ASSERTE(NULL != hEvents[1]);

	//
	// Initial bind
	//
	ResetBind();

	//
	// initial LPX socket address list is attained
	//
	DWORD dwTimeout = 1000; // broadcast interval
	while (1) {

		DWORD dwWaitResult = ::WaitForMultipleObjects(
			2, hEvents, FALSE, dwTimeout);

		if (WAIT_OBJECT_0 == dwWaitResult) {
			return 0;
		} else if (WAIT_OBJECT_0 + 1 == dwWaitResult) {
			// reset bind
			ResetBind();
		} else if (WAIT_TIMEOUT == dwWaitResult) {
			BroadcastStatus();
		} else {
			DPErrorEx(_FT("Unexpected wait result %d: "), dwWaitResult);
			_ASSERTE(FALSE);
		}
	}
}