首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinHTTP异步回调

WinHTTP异步回调
EN

Stack Overflow用户
提问于 2012-02-21 02:26:33
回答 1查看 6.1K关注 0票数 0

我的C++不是很好,如果你在代码片段中看到一些更好的东西,请告诉我!

我正在以异步方式实现winhttp。但我在检索响应时遇到了问题。我想不出来。因为您应该能够一次解析整个响应。由于可能会出现多个并发请求,因此不能在全局变量中缓冲响应(headers+body)。

如何检索http get请求的响应?或者,在新线程上执行winhttp synchronous是不是一种好的做法(这样主循环就不会被阻塞,然后在阻塞后调用函数?):

代码语言:javascript
复制
     void __stdcall cb(HINTERNET h, DWORD_PTR d, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength){ 
         char* s=new char[1];

             DWORD dwSize = 0;
             if (dwInternetStatus==WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE){
                                 MessageBoxA(0,s,"",0);

                WinHttpQueryDataAvailable( h, &dwSize);
                .....

             }

 }

以及主要的调用:

代码语言:javascript
复制
...winhttpopen...
WinHttpSetStatusCallback(request, (WINHTTP_STATUS_CALLBACK)whCallback,WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS,0);
...winhttpsend....
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-17 02:30:45

在MSDN - Asynchronous Completion in WinHTTP上查看此示例代码。

在QueryData中调用WinHttpQueryDataAvailable将生成一个状态回调,其中dwInternetStatus参数中包含WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE完成。通过检查lpvStatusInformation参数指向的值,回调可以确定还有多少数据要读取,如果没有剩余数据,则可以继续显示已读取的所有数据。

这表明您的回调是使用缓冲区指针和数据长度调用的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9366402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档