这时候用浏览器打开网页也很慢,怎么解决?求高人解答!代码类似这样,用LIBCURL也不行。
HINTERNET hInternet = InternetOpen(_T("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"),  
INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (NULL == hInternet)  
{  
return _T("");  
}   LONG nPort = 80;
HINTERNET hSession = InternetConnect(hInternet, _T("www.baidu.com"),  
(INTERNET_PORT)nPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if(hSession == NULL)
{
return _T("");
} CString sHtmlHeader;  
sHtmlHeader = _T("Content-Type: application/x-www-form-urlencoded\r\n");  
sHtmlHeader += _T("Accept: */*\r\n");  
sHtmlHeader += _T("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0\r\n");  
sHtmlHeader += _T("Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n");  
sHtmlHeader += _T("Host: www.baidu.com\r\n");  
sHtmlHeader += _T("Referer: ")+strURL;        HINTERNET hRequest = HttpOpenRequest(hSession, _T("GET"), strGetURL,  
_T("HTTP/1.1"), _T(""), 0, INTERNET_FLAG_NO_AUTH |  
INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_NO_CACHE_WRITE, 0);   int iTimeout = 10000;  
InternetSetOption(hRequest, INTERNET_OPTION_CONNECT_TIMEOUT,  
&iTimeout, sizeof(iTimeout));  
InternetSetOption(hRequest, INTERNET_OPTION_SEND_TIMEOUT,  
&iTimeout, sizeof(iTimeout));  
InternetSetOption(hRequest, INTERNET_OPTION_RECEIVE_TIMEOUT,  
&iTimeout, sizeof(iTimeout));  
InternetSetOption(hRequest, INTERNET_OPTION_DATA_SEND_TIMEOUT,  
&iTimeout, sizeof(iTimeout));  
InternetSetOption(hRequest, INTERNET_OPTION_DATA_RECEIVE_TIMEOUT,  
&iTimeout, sizeof(iTimeout));  
InternetSetOption(hRequest, INTERNET_OPTION_LISTEN_TIMEOUT,  
&iTimeout, sizeof(iTimeout));   BOOL bResult = HttpSendRequest(hRequest, sHtmlHeader.GetBuffer(),  
sHtmlHeader.GetLength(), _T(""), 0);  

解决方案 »

  1.   

    是不是WINDOWS有什么连接数限制,可是我都调用了InternetCloseHandle啊
      

  2.   

    个人建议优化一下程序结构 不要多个return,  很明显一个逻辑 if(hSession == NULL) 时 InternetOpen 打开的句柄就泄漏了BOOL bRet = FALSE;//变量初始化
    HINTERNET hInternet = NULL;
    HINTERNET hSession = NULL;
    //其它变量//主过程
    do
    {
      hInternet = InternetOpen( xxxxx );
      if (NULL == hInternet)  
      { 
       TRACE(XXXXX)
        bRet = -1;
        break;  
      }  hSession = InternetConnect( xxxxxxx );
      if(hSession == NULL)
      {
        TRACE(XXXXX)
        bRet = -1;
        break; 
      }
     
      …………  //all done
      bRet = TRUE;  
    }while(0);//结束清理
    if(hSession)
    {
       InternetCloseHandle( hSession );  hSession = NULL;
    }
    if(hInternet)
    {
       InternetCloseHandle(hInternet );  = NULL;
    }
    ……return bRet;
      

  3.   

    @zgl7903  这里确实有问题,但我现在把InternetOpen和InternetConnect改成了成员变量,只初始化一次,问题仍然存在。
      

  4.   

    @bigtree_mfc 没有啊
      

  5.   

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
    "MaxConnectionsPerServer"=dword:00000040
    "MaxConnectionsPer1_0Server"=dword:00000040检查是否资源泄漏的办法之一:
    在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
    让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!搜“GDI泄露检测”
      

  6.   


    不是,因为HttpSendRequest超时的时候,电脑用浏览器都是上不了网的,程序中断后才恢复上网。