2011-04-14 66 views
2

劑量這個函數總是返回buf.size()或-1? 如果沒有,這就代表我需要召回的函數寫左資料不寫?返回值(QByteArray中& buf);

例如,如果我有一個100個字節QByteBuffer。 時,我稱之爲「tcpSocket.write(buf_100_bytes)」,是有可能,我得到60或其他什麼東西?

此外,立即劑量這個函數返回?

+0

@Frank Osterfeld:謝謝你的警告,那不是我的真正意圖。我會注意。我已經嘗試過投票或接受別人之前,但該網站警告我,我沒有足夠的priviledget,所以我認爲只有誰回答足夠的問題可以投票..可能是我需要閱讀的常問問題stackoverflow :) – jnblue 2011-04-14 17:24:08

回答

2

與POSIX write()一樣,QIODevice :: write()返回的是寫入的字節數ñ。這可以是0到緩衝區大小之間的任何數字。此外,如果發生錯誤,它可能會返回一個負數,您應該單獨檢查。 QIODevice :: write()不會阻塞套接字(它們被設置爲非阻塞模式),這些字節只是添加到緩衝區並稍後寫入。 要在寫入字節時獲得通知,可以連接到bytesWritten(qint64)信號。要阻塞,直到實際寫入字節,可以使用waitForBytesWritten()(通常在主/ UI線程中不是個好主意)。

+0

+一個給弗蘭克的帖子。我只是補充說POSIX是* nix系統API,但我確定說Windows的算法類似 – Barbaris 2011-04-14 11:56:51

+0

非常感謝!如果它不是用於套接字,則意味着「寫(某事);某事= NULL;」不安全?因爲當系統實際上想寫數據,但數據設置爲NULL ... – jnblue 2011-04-14 16:13:38

+0

好吧,我想我明白了,我最後的評論是愚蠢的:),如果我這樣做是安全的,因爲系統會深層複製數據到套接字緩衝區。謝謝! – jnblue 2011-04-14 16:39:06

0

我引述Qt文檔:

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

這意味着,它將返回寫入的字節數或在出現錯誤時返回-1。您可以通過調用error()方法或連接到error()信號來獲取錯誤。