3

qtで非同期ファイルioを実現する方法を考えていましたか?これはバニラqtでも達成可能ですか、それとも誰かがこのようなことを達成するために別のライブラリ(たとえばlibuv)を使用する必要がありますか?私はQDataStreamを見ていましたが、それは「ストリーム」ですが、ノンブロッキングではありません。1つの解決策は、内部でlibuvを使用するカスタムQIODeviceを作成することだと思います。これは、QDataStreamで使用できますが、どこから始めればよいかわかりません。何か案は?

提供された助けに感謝します。

4

1 に答える 1

3

I/Oを処理するスレッドを実装します。適切なsig/slotを接続して、メインスレッドから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&)));
   ....
 }
于 2012-12-03T10:33:39.957 に答える