我正在使用与视频摄像头设备通信的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上提问。
答案 0 :(得分:0)
您可以触发新线程t1然后调用t1.join()。 将t1函数设置为在回调完成时返回。