2012-11-12 58 views
3

我正在使用從QIODevice派生的QLocalSocket。 QIODevice::write的文檔說如何在不阻塞的情況下寫入QLocalSocket :: write中的所有數據?

寫入數據的最大maxSize字節的數據到設備。返回實際寫入的字節數,如果發生錯誤,則返回-1。

我很困惑,在什麼情況下函數寫入不到maxSize字節的數據和文檔似乎並沒有告訴我這一點。我可以這樣循環

for(int written = 0; written != len;) { 
    int writtenNow = sock->write(data + written, len - written); 
    if(writtenNow != -1) { 
    written += writtenNow; 
    } else { 
    // oops, call cops! 
    } 
} 

但是當它不寫入所有數據時該怎麼辦?我應該撥打waitForBytesWritten嗎?據QLocalSocket的文檔,這應該不是蜜蜂需要

雖然QLocalSocket是專爲一個事件循環使用,有可能使用它沒有一個。在這種情況下,您必須使用waitForConnected(),waitForReadyRead(),waitForBytesWritten()和waitForDisconnected(),直到操作完成或超時過期。

因此我深感困惑。 任何人都可以請說明這一點?

回答

0

我解決這樣的這樣的問題,它運行的方法寫在單獨的線程和主線程不阻塞

... 
QtConcurrent::run(this, &MyClass::writeAsync, sock, data); 
... 

void MyClass::writeAsync(QLocalSocket socket, QByteArray data) { 
    socket->write(data); 
} 
相關問題