• 6289阅读
  • 4回复

[提问]关于多线程写文件的问题 [复制链接]

上一主题 下一主题
离线83888788
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-10

QFile *missionFile;
missionFile
->open(QIODevice::Append|QIODevice::ReadWrite);

同样是以这样的方式打开文件
我在linux和windows写入一个音频文件(mp3)的时候为什么在linux下会出现问题
(我写的是一个多线程写入文件,每个线程写入前QFile   seek到固定的位置,但是在linux下音频文件就变乱了)


哪位大哥指点一下?
离线coblan

只看该作者 1楼 发表于: 2011-03-11
Re:获取QT窗口句柄
QFile *missionFile;
请问你是这样写的吗??
这样写,只是一个指针啊,还没有分配内存,应该不能进行操作吧。
离线83888788
只看该作者 2楼 发表于: 2011-03-11
回 1楼(coblan) 的帖子
分配了内存;
代码多,很多都简略了。。
离线jdwx

只看该作者 3楼 发表于: 2011-03-11
使用QMutex,保证文件写入顺序。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线83888788
只看该作者 4楼 发表于: 2011-03-12
使用了qmutex...
谢谢楼上的各位了,问题还是没解决
估计跟windows和linux建立文件的方式有关系吧。。。

补充一下问题

QFile *file=new QFile(......);
file.open(QIODevice::Append);

void PieceThread::slotReadReady()
{
        while(reply!=NULL&&!pauseFlag&&!reply->atEnd())                
        {
            QMutexLocker locker(&mutex);
            file->seek(workingPos);
                workingPos+=file->write(reply->read(4096));   //调试(F5)就会出错,运行不错 很奇怪
        }
}

这是下载写数据的模块
windows下工作,下下来的文件(如MP3)数据顺序是对的
linux下工作,下下来的文件数据顺序就是乱的(初步断定是数据接收的顺序,而没有按照seek的位置来写文件)

最后一点题外的:
在我注释的那一行总是出现Segmentation_fault(debug模式下更频繁),可以肯定的是我的指针不是空指针, file和reply在调试的局部变量窗口都有合法的地址值,很郁闷啊!
快速回复
限100 字节
 
上一个 下一个