qt ftp上传文件相关,如何定时队列上传多个文件

现在的场景是,不定时会有新文件来到指定文件夹,我设定是来一个新文件就触发信号,将文件的信息加入向量中,定时遍历这个向量,同时上传其中的文件,上传完毕后将文件remove出向量,但是我尝试之后,发现不可行,会报错

    if(!ToUploadFileVec.isEmpty())
    {
        for(int i = 0; i < ToUploadFileVec.size(); i++)
        {
            //上传文件
            FtpManager * ftp = new FtpManager("127.0.0.1", "anonymous", "", 21, this);

            QString localFile = ToUploadFileVec.at(i).filePath;
            ftp->S_uloadFile(localFile, "");
         //传输成功
            connect(ftp, &FtpManager::G_sndSucess, this, [=]()
            {
                qDebug() << __LINE__ << "remove";
                ToUploadFileVec.removeAt(i);
            });

}
}

请问这种同时上传多个文件到底应该如何实现

使用生产者消费者模型,把代码重构一下
生产者线程:来一个新文件就触发信号,将文件的信息加入向量队列中m_ToUploadFileVec(注意加锁),然后通知消费者线程处理事件
消费者线程池:启动一组线程,并行上传多个文件。从向量队列中m_ToUploadFileVec(注意加锁)获取文件信息,上传,上传成功从m_ToUploadFileVec中删除当前向量元素

这样remove会出错,删除后vector整个会往前移的。可以采用每次都用第一个,然后使用erase擦除保证 删除的位置不会出错。

if(ToUploadFileVec.size() > 0)
    {
        QString localFile = ToUploadFileVec.at(0).filePath;
//你的代码
//...
        ToUploadFileVec.erase(ToUploadFileVec.begin());
    }

给你找了一篇非常好的博客,你可以看看是否有帮助,链接:QT FTP上传文件