QtConcurrent::运行正确使用

QtConcurrent::run right use

本文关键字:运行 QtConcurrent      更新时间:2023-10-16

我试图使用一个在所选时间之前录制视频的函数,所以我使用信号来启动它,但GUI保持阻塞,所以我现在尝试使用QtConcurrent::run在一个单独的线程中执行。我有一个记录的类,所以我试着用这种方式从同一个类调用它:

 void VideoProcessor::record(int index, int time, int frames, QString path){
           QFuture<void> future = QtConcurrent::run(recordAsync,index,time,frames, path);
}
void VideoProcessor::recordAsync(int index, int time, int frames, QString path)
{
     recording code ....
}

或者来自其他类似的地方:

void Controller::StartRecording(int index, int time, int frames, QString path)
{
    QFuture<void> future = QtConcurrent::run(&this->videoProcessor,record,index,time,frames, path);
    this->videoProcessor->record(index,time,frames,path);
}

但它显示了这个错误:

错误:调用"run"没有匹配的函数(ab::VideoProcessor**,
<未解析的重载函数类型>,int&,int&,int&,Q字符串(amp;)'
Q未来<void>future=QtConcurrent::run(&this>videoProcessor,record,index,time,frames,
路径);

您应该提供指向对象的指针以及类成员函数的地址。如果你的函数有参数,你可以在最后传递它们:

QFuture<void> future = QtConcurrent::run(this, &VideoProcessor::recordAsync, index, time, frames, path);