DWORD WINAPI Nui_ProcessThread( ) { const int numEvents = 4; HANDLE hEvents[numEvents] = { m_hEvNuiProcessStop, m_hNextDepthFrameEvent, m_hNextColorFrameEvent, m_hNextSkeletonEvent }; int nEventIdx; DWORD t; // Main thread loop bool continueProcessing = true; while ( continueProcessing ) { // Wait for any of the events to be signalled nEventIdx = WaitForMultipleObjects( numEvents, hEvents, FALSE, 100 ); // Timed out, continue if ( nEventIdx == WAIT_TIMEOUT ) { continue; } // stop event was signalled if ( WAIT_OBJECT_0 == nEventIdx ) { continueProcessing = false; break; } if ( WAIT_OBJECT_0 == WaitForSingleObject( m_hNextDepthFrameEvent, 0 ) ) { //only increment frame count if a frame was successfully drawn Nui_GotDepthAlert(); } if ( WAIT_OBJECT_0 == WaitForSingleObject( m_hNextColorFrameEvent, 0 ) ) { Nui_GotColorAlert(); } if ( WAIT_OBJECT_0 == WaitForSingleObject( m_hNextSkeletonEvent, 0 ) ) { Nui_GotSkeletonAlert( ); } } return 0; }
DWORD WINAPI _Nui_ProcessThread() { HANDLE hEvents[4]; int nEventIdx,t,dt; // Configure events to be listened on hEvents[0]= m_hEvNuiProcessStop; hEvents[1]= m_hNextDepthFrameEvent; hEvents[2]= m_hNextVideoFrameEvent; hEvents[3]= m_hNextSkeletonEvent; #pragma warning(push) #pragma warning(disable: 4127) // conditional expression is constant // Main thread loop while(1) { // Wait for an event to be signalled nEventIdx=WaitForMultipleObjects(sizeof(hEvents)/sizeof(hEvents[0]),hEvents,FALSE,100); // If the stop event, stop looping and exit if(nEventIdx==0) break; // Perform FPS processing t = timeGetTime( ); if( m_LastFPStime == -1 ) { m_LastFPStime = t; m_LastFramesTotal = m_FramesTotal; } dt = t - m_LastFPStime; if( dt > 1000 ) { m_LastFPStime = t; int FrameDelta = m_FramesTotal - m_LastFramesTotal; m_LastFramesTotal = m_FramesTotal; //::PostMessageW(m_hWnd, WM_USER_UPDATE_FPS, IDC_FPS, FrameDelta); } // Perform skeletal panel blanking if( m_LastSkeletonFoundTime == -1 ) m_LastSkeletonFoundTime = t; dt = t - m_LastSkeletonFoundTime; if( dt > 250 ) { if( !m_bScreenBlanked ) { Nui_BlankSkeletonScreen( ); m_bScreenBlanked = true; } } // Process signal events switch(nEventIdx) { case 1: Nui_GotDepthAlert(); m_FramesTotal++; break; case 2: Nui_GotVideoAlert(); break; case 3: Nui_GotSkeletonAlert( ); break; } } #pragma warning(pop) return (0); }