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

标签 c++ multithreading class boost ffmpeg

我有一些类 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/

相关文章:

c++ - 通过函数将文件读入vector

c++ - 给定两个字谜词。交换一个单词(仅允许交换相邻的字母)以到达另一个单词

java - 从作业中停止 ScheduledExecutorService 中的 Runnable 作业

c - UNIX 上的进程间通信

android - 用另一个类更改一个类的 TextView

java - 将 Android 事件绑定(bind)到 Qt 应用程序

c++ - 不同编译器的重载分辨率不同

C#线程内存使用

java - 为什么所有的java代码都打包在类中?

c# - 如何将 MonoBehaviour 添加到 sprite (Player)?