2012-12-03 50 views
2

我想知道如何在qt中實現異步文件io?這甚至可以在香草qt中實現,或者是否有人需要使用另一個庫(例如libuv)來實現這樣的功能?我在看QDataStream,但即使它是一個「流」它不是非阻塞。我想一個解決方案是製作一個自定義的QIODevice,它在內部使用libuv,然後可以與QDataStream一起使用,但不知道從哪裏開始。有任何想法嗎?如何在qt中做異步文件io?

感謝您提供任何幫助。

+0

在另一個線程中的同步IO? – alxx

+0

我認爲他想要的是一個雙向I/O端口。 –

回答

2

我會實現一個處理I/O的線程。您可以連接適當的sig/slots以從主線程向IO線程「調用」IO。您可以將要讀取/寫入的數據作爲參數傳遞給信號。這樣的事情:

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