我用MFC封装的WinInet类来访问一个站点获取信息,在读取数据的时候CPU奔到了100%占用率,而且文件大小为20~30KB的也需要7、8秒钟,效率非常低下~这是怎么回事呢?初次使用WinInet,很多不明白的,以下是我的实现代码:// http connection
CHttpConnection *pHttpConnection=NULL;
// http file pointer
CHttpFile *pHttpFile=NULL;
// server url and object.
CString szServerUrl, szObject;
CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");
// extract server and objects
szServerUrl = url;
ExtractObject(szServerUrl,szObject); try
{
pHttpConnection=GetHttpConnection(szServerUrl,0,dwPort); if( NULL == pHttpConnection)
{
// no exception raised but there is an error.
return WEB_ACCESS_UNEXPECTED_ERROR;
}
}
catch (CInternetException *pException)
{
char buffer[1023];
pException->GetErrorMessage(buffer, 1023);
resultString = buffer;
return pException->m_dwError;
} // open request
try
{
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, szObject); if(NULL == pHttpFile)
{
Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_UNEXPECTED_ERROR;
}
}
catch(CInternetException *pException)
{
char buffer[1023];
pException->GetErrorMessage(buffer, 1023);
resultString = buffer; Clear(pHttpConnection,pHttpFile);
return pException->m_dwError;
} // send the request
try
{ BOOL ret = pHttpFile->SendRequest(strHeaders, (LPVOID)(LPCSTR)szFormData, szFormData.GetLength()); if( FALSE == ret )
{
Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_UNEXPECTED_ERROR;
}
}
catch(CInternetException *pException)
{
char buffer[1023];
pException->GetErrorMessage(buffer, 1023);
resultString = buffer; Clear(pHttpConnection,pHttpFile);
return pException->m_dwError;
} // query status code
DWORD retCode;
BOOL ret = pHttpFile->QueryInfoStatusCode(retCode);
if( FALSE == ret )
{
Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_QUERY_INFO_ERROR;
}
else if( HTTP_STATUS_OK != retCode )
{
Clear(pHttpConnection,pHttpFile);
return retCode;
} char buf[2];
int bytesRead;
resultString = "";
while( (bytesRead = pHttpFile->Read(buf, 1)) > 0 )
{
resultString += buf[0];
} Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_DONE;
调用的时候是:CWebAccess webAccess;CString result;
webAccess.Post(m_wndEditURL, m_wndEditData, 8080,result);
请知道的朋友说明下
CHttpConnection *pHttpConnection=NULL;
// http file pointer
CHttpFile *pHttpFile=NULL;
// server url and object.
CString szServerUrl, szObject;
CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");
// extract server and objects
szServerUrl = url;
ExtractObject(szServerUrl,szObject); try
{
pHttpConnection=GetHttpConnection(szServerUrl,0,dwPort); if( NULL == pHttpConnection)
{
// no exception raised but there is an error.
return WEB_ACCESS_UNEXPECTED_ERROR;
}
}
catch (CInternetException *pException)
{
char buffer[1023];
pException->GetErrorMessage(buffer, 1023);
resultString = buffer;
return pException->m_dwError;
} // open request
try
{
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, szObject); if(NULL == pHttpFile)
{
Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_UNEXPECTED_ERROR;
}
}
catch(CInternetException *pException)
{
char buffer[1023];
pException->GetErrorMessage(buffer, 1023);
resultString = buffer; Clear(pHttpConnection,pHttpFile);
return pException->m_dwError;
} // send the request
try
{ BOOL ret = pHttpFile->SendRequest(strHeaders, (LPVOID)(LPCSTR)szFormData, szFormData.GetLength()); if( FALSE == ret )
{
Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_UNEXPECTED_ERROR;
}
}
catch(CInternetException *pException)
{
char buffer[1023];
pException->GetErrorMessage(buffer, 1023);
resultString = buffer; Clear(pHttpConnection,pHttpFile);
return pException->m_dwError;
} // query status code
DWORD retCode;
BOOL ret = pHttpFile->QueryInfoStatusCode(retCode);
if( FALSE == ret )
{
Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_QUERY_INFO_ERROR;
}
else if( HTTP_STATUS_OK != retCode )
{
Clear(pHttpConnection,pHttpFile);
return retCode;
} char buf[2];
int bytesRead;
resultString = "";
while( (bytesRead = pHttpFile->Read(buf, 1)) > 0 )
{
resultString += buf[0];
} Clear(pHttpConnection,pHttpFile);
return WEB_ACCESS_DONE;
调用的时候是:CWebAccess webAccess;CString result;
webAccess.Post(m_wndEditURL, m_wndEditData, 8080,result);
请知道的朋友说明下
下载效率,可能需要自己下载来解析..
WinInet就是你这么使用步骤了