gpt4 book ai didi

c++ - WinHTTP 异步回调

转载 作者:行者123 更新时间:2023-11-27 23:26:10 24 4
gpt4 key购买 nike

我的 C++ 不是很好,如果您在代码片段中看到可以更好的地方,请教我!

我正在以异步方式实现 winhttp。但我无法检索响应。我想不通。因为您应该能够一次解析整个响应。由于可能会发生多个并发请求,因此在全局变量中缓冲响应( header +正文)不是可行的方法。

如何获取 http get 请求的响应?或者,在新线程上同步执行 winhttp 是否是一个好习惯(这样主循环就不会被阻塞,然后在完成后调用一个函数?):

     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);
.....

}

}

主要调用:

...winhttpopen...
WinHttpSetStatusCallback(request, (WINHTTP_STATUS_CALLBACK)whCallback,WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS,0);
...winhttpsend....

最佳答案

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

The call to WinHttpQueryDataAvailable in QueryData generates a status callback with a WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE completion in the dwInternetStatus parameter. By checking the value pointed to by the lpvStatusInformation parameter, the callback can determine how much data is left to be read, and if there is no remaining data, can proceed to display all the data that has been read.

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

关于c++ - WinHTTP 异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9366402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com