Qt 多线程复制文件崩溃
我在生产者线程中遍历文件,把文件塞入队列,消费者从队列取文件路径进行复制、或剪切行为
用了 QSemaphore 来限制队列长度,达到阻塞的目的,起了8个消费者线程
这段代码复制是没问题,剪切(rename)就会崩溃,为什么?rename 是异步的吗?
报错的故障模块是
故障模块名称: msvcrt.dll
用了 QSemaphore 来限制队列长度,达到阻塞的目的,起了8个消费者线程
这段代码复制是没问题,剪切(rename)就会崩溃,为什么?rename 是异步的吗?
报错的故障模块是
故障模块名称: msvcrt.dll
static QSemaphore freeSpace(8);
static QSemaphore usedSpace(0);
static QQueue<MoveInfo *> task_q;
// 消费者代码
void Consumer::run()
{
MoveInfo *info;
while(true)
{
usedSpace.acquire();
info = task_q.dequeue();
freeSpace.release();
if(info->src.isEmpty())
{
info->deleteLater();
break;
}
if(!QFileInfo(info->dst).exists())
{
if(info->remove)
{
bool b = QFile::rename(info->src, info->dst);
b = QFile::rename(info->src.replace(".sa", ".sc"), info->dst.replace(".sa", ".sc"));
} else {
QFile::copy(info->src, info->dst);
QFile::copy(info->src.replace(".sa", ".sc"), info->dst.replace(".sa", ".sc"));
}
}
info->deleteLater();
}
}
...全文


