在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上提出问题。

+0

你可能想看看https://stackoverflow.com/documentation/c%2b%2b/699/threading/13552/using-condition-variables#t=201704260920460644225 – JVApen

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

What does this thread join code mean?