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;
}
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,不过这个函数设置之后毫无作用。。。开始查找其他解决方案,最终发现有单独线程的方案可取,也就是利用线程来访问,之后可以通过句柄来监控时间,
仅代表个人观点,不喜勿喷,谢谢。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯