codeproject上有一篇老美写的关于http异步的文章:。
我做http异步的时候,也是参考了这篇文章,受益匪浅。今天特地翻译出来,与大家共飨。
wininet http的异步方式使用
绪论
如果你曾经深入msdn研究过wininet api,你会注意到可使用异步方式且该方式是被推崇的。
当你决定使用该方式时,你却找不到如何使用异步的说明。网上也没有任何例子。研究了很长时间,也做了很多试验,我最终决定着手来填补一份(非官方)空缺的文档。
为什么异步方式是最好的?因为它能够正确的处理超时。而在ie5.5下wininet缺少此功能。
如果你试图使用terminatethread或closehandle函数来处理超时(这些函数在msdn文档中有介绍),你将落入各种各样的陷阱中。
以下条件中异步测试成功:单处理器和多处理器的winnt4系统下的ie4.01sp3, ie5.0, ie5.01, ie5.5sp1,压力环境(12小时不间断地在多处理器nt服务器下运行15个并发实例)。
原理
使用wininet函数的异步方式,你必须按照正确的顺序:
1.使用internet_flag_async打开任务。
2.使用internetsetstatuscallback设置回调。
3.使用internetopenurl打开连接。
4.如果internetopenurl返回null且getlasterror的值是error_io_pending:
1)等待回调函数返回internet_status_handle_created通知,保存连接句柄;
2)等待回调函数返回internet_status_request_complete通知。
5.解析header里的vontent-length字段,创建一个internet_buffers结构:
1)dwstructsize = sizeof(internet_buffers);
2)lpvbuffer = 你申请的缓冲;
![]()
如果喜欢windows mobile下wininet的异步使用方法请收藏或告诉您的好朋友.
阅读(245) | 评论(0) | 转发(0) |