kllo__ 2022-08-24 09:13 采纳率: 52.2%
浏览 66
已结题

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);
            });

}
}

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

  • 写回答

3条回答 默认 最新

  • 玉古云投 2022-08-24 15:49
    关注

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月31日
  • 修改了问题 8月24日
  • 创建了问题 8月24日