Как сделать асинхронный файл io в qt?

Мне было интересно, как добиться асинхронного ввода-вывода файла в qt? Это вообще достижимо в vanilla qt или кому-то нужно будет использовать другую библиотеку (например, libuv) для достижения чего-то подобного? Я смотрел на QDataStream, но даже если это «поток», он не является неблокирующим. Я предполагаю, что одним из решений было бы создание пользовательского QIODevice, который использует libuv внутри, который затем можно использовать с QDataStream, но не знаю, с чего начать. Любые идеи?

Спасибо за любую оказанную помощь.


person user71512    schedule 03.12.2012    source источник
comment
Синхронный ввод-вывод в другом потоке?   -  person alxx    schedule 03.12.2012
comment
я думаю, что он хочет, это один двунаправленный порт ввода-вывода.   -  person Lwin Htoo Ko    schedule 03.12.2012


Ответы (1)


Я бы реализовал поток, который будет обрабатывать ввод-вывод. Вы можете подключить соответствующие сиг/слоты, чтобы «вызвать» ввод-вывод из основного потока в поток ввода-вывода. Вы можете передать данные для чтения/записи в качестве параметра сигнала. Что-то вроде этого:

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&)));
   ....
 }
person alwences    schedule 03.12.2012