永发信息网

InternetOpenUrl能不能设置超时的时间

答案:3  悬赏:30  手机版
解决时间 2021-02-06 15:51
  • 提问者网友:绫月
  • 2021-02-05 18:25
InternetOpenUrl能不能设置超时的时间
最佳答案
  • 五星知识达人网友:野味小生
  • 2021-02-05 18:45
有单独线程的方案可取,也就是利用线程来访问,之后可以通过句柄来监控时间,具体代码如下:

struct PARA
{
string url = "";
string* requst = NULL;
bool result = false;

HINTERNET session = NULL;
HINTERNET bS = NULL;
};

static DWORD WINAPI thread_access(LPVOID args)
{
PARA* p;
p = (PARA*)args;

p->session = InternetOpenA("UrlTest", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

if (p->session != NULL)
{
p->bS = InternetOpenUrlA(p->session, p->url.c_str(), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
if (p->bS != NULL)
{
p->requst = new string();
BYTE Temp[MAXSIZE];
ULONG Number = 1;
while (Number > 0)
{
InternetReadFile(p->bS, Temp, MAXSIZE - 1, &Number);
Temp[Number] = '\0';
p->requst->append((char*)Temp);
}
InternetCloseHandle(p->bS);
p->bS = NULL;
p->result = true;
}
InternetCloseHandle(p->session);
p->session = NULL;
}
}

static int urlAccess(const char* url, std::string& request, int timeOutSecs)
{
PARA *p1 = new PARA();
p1->url = url;

DWORD id;
int result = -1;
HANDLE hThread = CreateThread(NULL, 0, thread_access, p1, 0, &id);

if (WaitForSingleObject(hThread,timeOutSecs*1000))
{
std::cout << "TIME" << std::endl;
if (p1->bS != NULL)
{
InternetCloseHandle(p1->bS);
}
if (p1->session != NULL)
{
InternetCloseHandle(p1->session);
}
}

if (p1->result)
{
request.append(*(p1->requst));
result = 1;
}
result = 0;

if (hThread)
{
CloseHandle(hThread);
}
return result;
}
全部回答
  • 1楼网友:拾荒鲤
  • 2021-02-05 20:49
一般都是远程VTY登录,使用完如果不退出的话,机器上的vty线路连接一直被占用。 如此直到vty线路北占满,然後,你就无法通过vty登录了。 本人就遇到过类似情况,console的密码也不知道,无法进去清除连接,设备为核心交换机也不能重启,蛋疼死了,最後找到了console口密码。才搞定。
  • 2楼网友:七十二街
  • 2021-02-05 20:23
你好! 利用wininet访问网络资源,有的网站不存在,会造成时间过长等问题,就想设置超时来解决这个问题,查到了API函数:InternetSetOption,不过这个函数设置之后毫无作用。。。开始查找其他解决方案,最终发现有单独线程的方案可取,也就是利用线程来访问,之后可以通过句柄来监控时间, 仅代表个人观点,不喜勿喷,谢谢。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯