我有代碼使用WinInet API異步執行HTTP請求。一般來說,我的代碼可行,但我對「正確」做事的方式感到困惑。在InternetReadFile()的文件,它規定:異步使用InternetReadFile()的正確方法
,以確保所有數據被檢索,應用程序必須繼續調用 的功能的InternetReadFile,直到該函數返回TRUE和 lpdwNumberOfBytesRead參數等於零。
但在異步模式下,它可能(或可能不會)返回false,並ERROR_IO_PENDING
一個錯誤,表示它會異步地做工作,並在完成時調用我的回調。如果我從字面上閱讀文檔,似乎異步調用也可能只是部分讀取所請求的緩衝區,並要求調用方繼續調用InternetReadFile,直到遇到讀取0字節爲止。
使用InternetReadFile()
同步看起來像一個典型的實現:
while(InternetReadFile(Request, Buffer, BufferSize, &BytesRead) && BytesRead != 0)
{
// do something with Buffer
}
但是,任何一個呼叫InternetReadFile()
可能表明,它會做的工作異步(也許閱讀的一部分,但可能性不是你所有的要求),它變得更加複雜。如果我轉向MSDN sample code作爲指導,實現很簡單,只需簡單地調用InternetReadFile()
一次,並期望單個返回即時或異步地讀取整個請求的緩衝區。這是使用此功能的正確方法,還是MSDN示例代碼忽略了只能讀取所請求的緩衝區的一部分的可能性?