【问题标题】:how to detect when kinect is disconnected / unplugged while program is running?如何在程序运行时检测 kinect 何时断开/拔出?
【发布时间】:2012-10-02 13:27:31
【问题描述】:

我正在使用官方 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吗?

【问题讨论】:

  • 标题不应该是“如何检测Kinect何时被disKinected”吗?
  • @PeteBecker :) 我更改了标题以使其更清晰。

标签: c++ visual-c++ kinect


【解决方案1】:

documentation 中它说 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!");
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-24
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多