Как определить, когда Kinect отключен / отключен во время работы программы?

Я работаю с одним из официальных примеров Kinect SDK 1.5 и пытаюсь выяснить, как добавить проверку, чтобы определить, когда Kinect отключается. В настоящее время приложение просто зависнет, поэтому должен быть способ предотвратить это.

Это основной цикл сообщений из примера SDK:

// Main message loop
while (WM_QUIT != msg.message)
{
hEvents[0] = m_hNextDepthFrameEvent;

// Check to see if we have either a message (by passing in QS_ALLINPUT)
// Or a Kinect event (hEvents)
// Update() will check for Kinect events individually, in case more than one are signalled
DWORD dwEvent = MsgWaitForMultipleObjects(eventCount, hEvents, FALSE, INFINITE, QS_ALLINPUT);

// Check if this is an event we're waiting on and not a timeout or message
if (WAIT_OBJECT_0 == dwEvent)
{
Update();
}

// does not work.
bool bla = m_pNuiSensor->NuiStatus();
if (NULL == m_pNuiSensor)
{
cout << 1 << endl;
}

if (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE))
{
// If a dialog message will be taken care of by the dialog proc
if ((hWndApp != NULL) && IsDialogMessageW(hWndApp, &msg))
{
continue;
}

TranslateMessage(&msg);
DispatchMessageW(&msg);
}
}

return static_cast<int>(msg.wParam);

Я добавил следующий бит:

    // does not work, bla will always be the same value.
bool bla = m_pNuiSensor->NuiStatus();
if (NULL == m_pNuiSensor)
{
cout << 1 << endl;
}

так как я предполагал, что, возможно, NuiStatus был бы способ обнаружить разрыв. К сожалению, это не сработает. То же самое верно для проверки, m_pNuiSensor является NULL,

Так как же обнаружить разрыв в работающем приложении?

EDIT1: я должен использовать NuiSetDeviceStatusCallback?

3

Решение

в документация он говорит, что NuiStatus возвращает HRESULT, а не bool, так не должно быть

HRESULT bla = m_pNuiSensor->NuiStatus();
if (bla == E_NUI_NOTCONNECTED)
{
cout << 1 << endl;
}

вместо?

2

Другие решения

следующее решение работает.

    // check if m_pNuiSensor is initialized.
if (NULL != m_pNuiSensor)
{
// get current status & check if not ok.
HRESULT current_status = m_pNuiSensor->NuiStatus();
if (current_status != S_OK )
{
SetStatusMessage(L"Lost connection to Kinect!");
}
}
0

По вопросам рекламы [email protected]