How to do async file io in qt?

2019-04-01 19:58发布

I was wondering how to achieve async file io in qt? Is this even achievable in vanilla qt or would someone need to use another library (libuv for example) to achieve something like this? I was looking at QDataStream but even though it is a "stream" it isn't non blocking. I guess one solution would be to make a custom QIODevice that uses libuv internally which can then be used with QDataStream but not sure where to start. Any ideas?

Thanks for any help provided.

1条回答
家丑人穷心不美
2楼-- · 2019-04-01 20:46

I would implement a thread that will handle the I/O. You can connect the appropriate sig/slots to "invoke" the IO from your main thread to the IO thread. You can pass the data to be read/written as a parameter to the signal. Something like this:

class FileIOThread : public QThread
{
public: 
    void run();
public slots: 
    void writeData(QByteArray &)
    void readData(QByteArray &)
};

class MyClass
{
private:
    FileIOThread m_writerThread;
signals: 
    void sendData(QByteArray &);
 ....
};

MyClass::MyClass()
{
    connect(this, SIGNAL(sendData(QByteArray&)),
                  &m_writerThread,SLOT(writeData(QByteArray&)));
   ....
 }
查看更多
登录 后发表回答