在C ++ 11中终止来自回调函数的线程

时间:2017-04-26 08:34:02

标签: c++ multithreading c++11 callback

我正在使用与视频摄像头设备通信的API。我的目标是用设备拍摄快照。

API适用于回调。您将回调函数连接到所需的功能。在这种情况下,拍摄快照。

这样做的功能看起来像这样......

MEDIALIB_SETSNAPCB(this, snapcb); // connect snapshot callback to callback function snapcb
MEDIALIB_TAKESNAP(device_nr, channel); // take snapshot of specified channel

问题是我需要等待回调函数snapcb在退出程序之前做出响应。运行snapcb后,MEDIALIB_TAKESNAP最多可能需要50秒才能响应,这不会等到回调完成后再转到下一行。

这是一个精简版:

...
int Snapshot::takeSnap()
{
    MEDIALIB_SETSNAPCB(this, snapcb); // connect snapshot callback to callback function snapcb

    CString device_nr = "TC1234";
    int channel = 1;
    MEDIALIB_TAKESNAP(device_nr, channel); // take snapshot of specified channel
    return 0;
}

void Snapshot::snapcb(const char* device_nr, int channel, const char* pBuf, int nLen, void* pUsr)
{
    Snapshot* pThis = (Snapshot*)pUsr;
    pThis->snapdatacb(device_nr, channel, pBuf, nLen);
}

void Snapshot::snapdatacb(const char* device_nr, int channel, const char* pBuf, int nLen)
{
    // ... create file on computer ...
}
...

我曾想过在一个线程中运行MEDIALIB_TAKESNAP(device_nr, channel);然后在回调返回时触发一个条件变量,但是在这种情况下无法找到如何使用条件变量的示例。

非常感谢任何帮助。另外,请评论我如何构建我的问题,因为我仍在学习如何在stackoverflow上提问。

1 个答案:

答案 0 :(得分:0)

您可以触发新线程t1然后调用t1.join()。 将t1函数设置为在回调完成时返回。

What does this thread join code mean?