如果我想將數據寫入到遠程側,等待它的答案,我至少需要waitForReadyRead
。但在調用之前,是否需要使用waitForBytesWritten
手動刷新輸出隊列,還是Qt會自動爲我寫入寫入隊列?我正在同步(阻塞),因此在這個函數中我無法使用事件循環或本地事件循環。不會了QIODevice :: waitForReadyRead隱含刷新輸出隊列(waitForBytesWritten)?
當使用std::cin
時,我們可以確定以前寫入的字節std::cout
將被刷新。這是類似的情況 - 它是否也適用於Qt套接字?
嗯,我不明白的結論,「因此,如果你的QIODevice是如一個與QTcpSocket插座,然後不,你不應該需要調用waitForReadyRead時要調用waitForBytesWritten」。什麼阻止Qt只是輪詢或選擇套接字讀取文件描述符以獲取新字節並填充其讀取隊列?爲什麼異步意味着我必須刷新字節? –
我的印象是,在這種情況下「異步」意味着調用寫入和讀取不會直接訪問設備,而是讀取和寫入緩衝區,只有在返回事件循環或調用時才寫入或讀取其中一個等待功能? –
也許我誤解了你的問題,如果是這樣,請糾正我。就目前而言,我知道它意味着它是在一個單獨的線程上處理的,所以經常在主線程中調用waitForReadyRead(這是一個阻塞調用)將不會阻塞設備的寫入過程,例如與QTcpSocket。 – TheDarkKnight