c++ - QtConcurrent Map 不能使用类方法

标签 c++ multithreading qt qtconcurrent

你好,我正在尝试将 QList 传递给 QtConcurrent::Map 函数,但它无法启动,我不明白为什么,也许有人知道可能是什么问题?

这是类方法代码

void MainWindow::find_file(QStringList &lst){
    QString fl_name = ui->ln_FlName->text();
    QRegExp exp;
    exp.setPattern(".*/("+ui->ln_FlName->text()+").*");
    QRegExp exp_2;
    exp.setPattern(".*/("+ui->ln_FlName->text()+")");
     foreach(const QString &str,lst)
      {
        // Do some work...   
      }}

这是我尝试执行此方法时的代码

void MainWindow::on_btn_start_clicked(){
QDir start_path(ui->ln_Dir->text());
QList<QFuture<QStringList> > future_list;
QList<QStringList> dirs_lists;
QStringList temp_dir_list;
QList<QString> lst_str;
foreach(const QFileInfo fl_inf,start_path.entryInfoList(QDir::NoDotAndDotDot|QDir::Dirs))
{
    if(fl_inf.isDir())
    {
        //Here I use QtConcurrent::run with other method and it works fine

        QFuture<QStringList>ft;
        ft=QtConcurrent::run(this,&MainWindow::File_Search,fl_inf.filePath());
        future_list.append(ft);
        num_ft+=1;
        temp_dir_list.append(fl_inf.filePath());
        lst_str.append(fl_inf.filePath());
    }


}
dirs_lists.append(temp_dir_list);
long long int sum = 0;
for(int i=0;i<future_list.count();i++)
{

    sum += future_list.at(i).result().count();
    dirs_lists.append(future_list.at(i).result());
}


//But this doesn't want to work 

QFutureWatcher<void> ft_watcher;
ft_watcher.setFuture(QtConcurrent::map(dirs_lists,&MainWindow::find_file));
}

然后编译器输出这个错误:

error: no matching function for call to 'map(QList&, )' QtConcurrent::map(dirs_lists,MainWindow::find_file); ^

error: no match for call to '(QtConcurrent::MemberFunctionWrapper1) (QStringList&)' map(*it); ^

最佳答案

您将 find_file 视为静态方法,而不是实例方法。有两种解决方案:

  1. find_file 变成静态方法。

  2. 将实例传递给 map:QtConcurrent::map(dirs_lists, &MainWindow::find_file, this)

当然,无论哪种情况,您都必须将 find_file 设计为线程安全的。

关于c++ - QtConcurrent Map 不能使用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37531509/

相关文章:

android - 构建使用 Protocol Buffer 的 Android 可执行 gRPC 服务器(无 APK)

c# - 如何防止一个方法跨多个线程运行?

c++ - 连续光线转换之间的时间延迟

qt - 如何使用 Windows/MinGW 平台为带有 SQLCipher 扩展的 SQLite-DB 构建 Qt-SQL-driver-plugin 'QSQLCIPHER'?

c++ - 如何将实用程序 (grep/sed) 的返回值分配给数组?

c++ - 如何让 Qt 图形出现在同一个窗口中?

java - 当 ThreadPoolExecutor 的所有任务都完成执行那里的作业时插入数据库

javascript - 如何使用集群增加 NodeJS 服务器的吞吐量?

c++ - 通过 Modbus TCP 与 CMMO-ST-C5-1-LKP Festo Controller 进行 Qt/C++ 通信

c++ - 此套接字选择代码有什么问题?