我有代码使用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示例代码忽略了只能读取所请求的缓冲区的一部分的可能性?