gpt4 book ai didi

c++ - 从 C++11 中的回调函数终止线程

转载 作者:行者123 更新时间:2023-12-02 10:24:55 25 4
gpt4 key购买 nike

我正在使用与摄像机设备通信的 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运行后可能需要长达 50 秒的响应时间 MEDIALIB_TAKESNAP ,它不会等待回调完成才转到下一行。

这是一个精简版:

...
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 上提问。

最佳答案

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

What does this thread join code mean?

关于c++ - 从 C++11 中的回调函数终止线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43628903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com