示例#1
0
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;
}
示例#2
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);
}