我有一些类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 taking 2 arguments
那么 - 我应该怎样处理我的代码才能让我的课程得到提升?
答案 0 :(得分:1)
当你写:
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的一个方法中调用的)