gpt4 book ai didi

c++ - Boost线程和FFmpeg : Such simple code gives me error C2064. 我做错了什么呀?

转载 作者:行者123 更新时间:2023-11-28 08:25:46 25 4
gpt4 key购买 nike

我有一些类 file.h,其中定义了 public: bool frameSendingFinished;。所以在类逻辑中我创建和编码视频帧,现在我想使用 ffmpeg 将它发送到某个服务器。我想在单独的线程中发送,所以在我的一个类函数中(在 file.cpp 中)我这样做:

  if (frameSendingFinished)
{
boost::thread UrlWriteFrame(url_context, (unsigned char *)pb_buffer, len);
}

....// some other functions code etc.

void VideoEncoder::UrlWriteFrame( URLContext *h, const unsigned char *buf, int size )
{
frameSendingFinished =false;
url_write (h, (unsigned char *)buf, size);
frameSendingFinished =true;
}

它与创建新线程一起工作。评论线程行使其编译...

所以错误是error c2064 term does not evaluate to a function takeing 2 arguments

那么 - 我应该如何处理我的代码才能使 boost 在我的类里面发挥作用?

最佳答案

当你写的时候:

boost::thread UrlWriteFrame(url_context, (unsigned char *)pb_buffer, len);

您创建一个名为 UrlWriteFrame 的 boost::thread 对象,并将 url_contextpb_bufferlen 传递给 boost::thread 构造函数。 boost::thread 的一个 ctors 期望一些可调用的东西(函数指针,函数对象)作为第一个参数,并将其他参数转发给该函数。在您的示例中,它最终会尝试类似以下内容:

url_context(pb_buffer, len);

这可能是触发“不计算为采用 2 个参数的函数”错误的原因。

IIUC,您想在新线程中调用UrlWriteFrame 函数。使用 boost::thread 的正确方法是这样的:

boost::thread (&VideoEncoder::UrlWriteFrame, this, url_context, (unsigned char *)pb_buffer, len);

(假设这是从 VideoEncoder 的方法之一调用的)

关于c++ - Boost线程和FFmpeg : Such simple code gives me error C2064. 我做错了什么呀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4127511/

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