作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些类 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_context
、pb_buffer
和 len
传递给 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/
我是一名优秀的程序员,十分优秀!