вот есть такой код получающий страницы по winnet,
зачастую после вывода строки HttpOpenRequest Successfull перед функцией HttpSendRequest программа подвисает на
несколько минут, либо очень надолго, можно ли сделать какой-нибудь таймаут для этих ф-й или как можно получать
страницу с таймаутом?
char* getpage(char* userag,char* proxy, char* url, char* document, char* referer)
{
char szData[1500];
DWORD dwBytesRead;
HINTERNET hInternet = ::InternetOpen(userag, INTERNET_OPEN_TYPE_PROXY, proxy,NULL,0);
if (hInternet != NULL)
{
puts("internetOpen successfull");
HINTERNET hConnect =::InternetConnect(hInternet, url, INTERNET_DEFAULT_HTTP_PORT, NULL,NULL, INTERNET_SERVICE_HTTP,0,1u);
if (hConnect != NULL) {
puts("internetConnect successfull");
HINTERNET hRequest =::HttpOpenRequest(hConnect, TEXT("GET"), document, NULL, referer, 0, INTERNET_FLAG_KEEP_CONNECTION, 1);
if (hRequest != NULL) {
puts("HttpOpenRequest successfull");
//вот тут подвисает иногда!!! BOOL bSend = ::HttpSendRequest(hRequest, NULL,0, NULL,0);
if (bSend) {
puts("httpSendRequest successfull");
BOOL bRead = ::InternetReadFile(hRequest, szData,sizeof(szData)-1, &dwBytesRead);
if (bRead == FALSE || dwBytesRead == 0)
{
puts("error readFile");
return 0;
}
szData[dwBytesRead] = 0;
return szData;
}
::InternetCloseHandle(hRequest);
}
::InternetCloseHandle(hConnect);
}
/
::InternetCloseHandle(hInternet);
}
return 0;
}
у меня там ещё таймер есть, а getpage вызвается из обработчика события таймера в цикле, что тогда конкретно в потоке запускать? может есть где простой иходничек работы с потоками? а что происходит в том случае, если код в потоках ещё не отпработал, а наступает следующее событие таймера, например код в каком-то потоке не может получить страницу и подвис, этот код уничтожется или эти недоработавшие потоки будут висеть где-то в памяти?
а сам по себе таймер не создает отдельные потоки случайно?
int CALLBACK TimerProc(void)
{
for (int j=0; j<numsites; j++)
{
//поток должен создаваться гдето тут?!!!
pagedata=getpage(...);
//действия с pagedata
//ещё два раза
getpage(...);
getpage(...);
//поток должен заканчиваться гдето тут!!!
}
}