资源描述:
《windows mobile下wininet的异步使用方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、WindowsMobile下WinInet的异步使用方法 codeproject上有一篇老美写的关于HTTP异步的文章:KB/IP/asyncinateThread或CloseHandle函数来处理超时(这些函数在MSDN文档中有介绍),你将落入各种各样的陷阱中。 以下条件中异步测试成功:单处理器和多处理器的E,INTER_OPEN_TYPE_PRECONFIG, NULL,NULL,INTER_FLAG_ASYNC);InterSetStatusCallback(m_Session, (INTER_STATUS_CALLBACK)InterCa
2、llbackFunc); 34:使用InterOpenUrl打开连接,等待INTER_STATUS_REQUEST_PLETE通知 使用lParam发送一个任务表示到你的回调。我总是用this指针来传递我的class。这里假设你知道如何处理回调。InterOpenUrl(m_Session,uurl,NULL,0, INTER_FLAG_RELOAD
3、INTER_FLAG_PRAGMA_NOCACHE
4、 INTER_FLAG_NO_CACHE_)this); 回调会收到一堆的消息。这是收到的dation;m_hHttpFile=(HINTER)(res->d
5、wResult); [openUrl]InterStatus:10[openUrl]InterStatus:11[openUrl]InterStatus:20[openUrl]InterStatus:21[openUrl]InterStatus:30[openUrl]InterStatus:31[openUrl]InterStatus:40[openUrl]InterStatus:41[openUrl]InterStatus:100INTER_STATUS_REQUEST_PLETE 5:解析content-length,创建IN12下一页——感谢阅读这篇文章,..,TER
6、_BUFFERS结构 一旦你得到了句柄,调用HttpQueryInfo(使用HTTP_QUERY_CONTENT_LENGTH标记)得到接收数据的大小。如果HTTP头里没有content-length参数,函数会失败。 创建INTER_BUFFERS结构。 INTER_BUFFERSib={sizeof(INTER_BUFFERS)}; ib.lpvBuffer=你申请的缓冲 ib.dp;78:循环读取剩余数据 调用InterReadFileEx(使用IRF_ASYNC标记)异步读取剩余数据。不要使用InterReadFile,因为它是同步函数。 你必须循环调用I
7、nterReadFileEx,直到ib.d_hHttpFile,ib,IRF_ASYNC,(LPARAM)this);if(!bOkGetLastError()==ERROR_IO_PENDING) 等待... p;ib.d_hHttpFile,ib,IRF_ASYNC,(LPARAM)this); if(!bOkGetLastError()==ERROR_IO_PENDING) 等待...} 你的回调函数会收到这些消息:[connect]InterStatus:40(receivingresponse)[connect]InterStatus:41(responsere
8、ceived)[connect]InterStatus:50[connect]InterStatus:51 还可能 [connect]InterStatus:100INTER_STATUS_REQUEST_PLETE 最后一个只有在GetLastError值为ERROR_IO_PENDING才会得到。如果你用d_httpFile); 关闭时,回调会收到这个消息: [connect]InterStatus:70INTER_STATUS_HANDLE_CLOSING 大多数错误例子中,连接都会出乎意料的关闭。此时,你会收到70在100(INTER_STATUS_REQU
9、EST_PLETE)之后。 此情形在整个过程都可能会发生。 10:关闭m_Session句柄前 你应该卸载回调: InterSetStatusCallback(m_Session,NULL); 以上将帮助那些使用WinI异步方式的人。(之后是老美希望大家购买他的代码,略过...)上一页12——感谢阅读这篇文章,..,