在C++中终止来自回调函数的线程11
问题描述:
我正在使用与视频摄像头设备进行通信的API。我的目标是为设备拍摄快照。在C++中终止来自回调函数的线程11
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上提出问题。
你可能想看看https://stackoverflow.com/documentation/c%2b%2b/699/threading/13552/using-condition-variables#t=201704260920460644225 – JVApen