Delphi, IdHTTP, Get запрос в цикле отдельным потоком.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by rapira37, 16 Oct 2012.

  1. rapira37

    rapira37 New Member

    Joined:
    30 Jul 2012
    Messages:
    21
    Likes Received:
    0
    Reputations:
    -1
    (Delphi XE2)
    После определённого количества Get запросов поток умирает. Это может быть и 5 и 100 запросов. (Как когда) В моей ситуации Пост запросы не подходят, нужно юзать геты.
    Компонент idHTTP я и создавал, и на форму бросал. Всё равно поток рано или поздно умирает. (Если использовать компонент находящийся на форме, то поток проживёт в разы дольше.)
    Я хочу написать бота, нужно чтобы каждые (к примеру) 15 секунд он отправлял гет запрос на определённый сайт и проверял нет ли для него указаний. Если они есть, то он отправляет другой гет запрос следуя указаниям, а если нет, то он ждёт новых указаний. Сколько не мучаюсь, но поток всё равно рано или поздно умирает при ёб**ом гет запросе.
    Оператор try except end особо не помогает, из-за него гет запрос отправляется дольше, но поток всё равно умирает. Прошу o помощи. :confused:
    Посоветуйте какую-то толковую литературу на эту тему, что-ли. Буду очень признателен. :)
     
    #1 rapira37, 16 Oct 2012
    Last edited: 16 Oct 2012
  2. rapira37

    rapira37 New Member

    Joined:
    30 Jul 2012
    Messages:
    21
    Likes Received:
    0
    Reputations:
    -1

    Извиняюсь, не так выразился. Виснет, скорее всего. К примеру оставляю наночь поток включеным, потом просыпаюсь и вижу в логе что поток проработал этак пол часа, затем, после очередного гет запроса поток завис, хоть и после последнего запроса прошло часа три-четыре. То есть, уведомления о том что поток завершил работу - не было, но и сам поток не отвечает. Он отправил гет запрос на сайт, а ответ, скорее всего, не поступил до сих пор, вот и получилось зависание инди, и из-за него же зависание потока.
    Запросы идут на vk.com и только, при запросах кукисы установлены, т.е коннектится как авторизированый пользователь.
    Я уже достаточно длительное время мучаюсь с этим вопросом. Что посоветуете?
     
  3. Vet

    Vet New Member

    Joined:
    3 Feb 2006
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Чтоб idHTTP не зависал, установи свойство ReadTimeout.
     
  4. rapira37

    rapira37 New Member

    Joined:
    30 Jul 2012
    Messages:
    21
    Likes Received:
    0
    Reputations:
    -1

    Какое значение посоветуете указать?
     
  5. Vet

    Vet New Member

    Joined:
    3 Feb 2006
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Не знаю, зависит от задачи, выполняемой потоком.
     
  6. Vet

    Vet New Member

    Joined:
    3 Feb 2006
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Думаю, таймаут надо поставить от 1 до 15.
     
  7. rapira37

    rapira37 New Member

    Joined:
    30 Jul 2012
    Messages:
    21
    Likes Received:
    0
    Reputations:
    -1
    А какая связь между sleep(15000); и временем ответа сайта после гет запроса?

    Выставил IdHTTP1.ReadTimeout:=15;
    При первом же запросе:
    [​IMG]
     
    #7 rapira37, 16 Oct 2012
    Last edited: 16 Oct 2012
  8. Vet

    Vet New Member

    Joined:
    3 Feb 2006
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Дык таймаут же в миллисекундах.
     
  9. muip

    muip New Member

    Joined:
    1 Sep 2011
    Messages:
    45
    Likes Received:
    4
    Reputations:
    0
    Работу с сетью нужно всегда обрабатывать на ошибки, в данном случаи:

    try
    //запрос
    except
    on EIdReadTimeout do
    //
    end;

    Совет: забей на инди и учись работать на винсоках.
     
  10. rapira37

    rapira37 New Member

    Joined:
    30 Jul 2012
    Messages:
    21
    Likes Received:
    0
    Reputations:
    -1
    Пробовал 4000, спустя ~час поток сам завершил свою работу.
     
  11. rapira37

    rapira37 New Member

    Joined:
    30 Jul 2012
    Messages:
    21
    Likes Received:
    0
    Reputations:
    -1
    Литературу не подскажете? Почитал бы на досуге. :)
     
  12. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Как уже подсказали - используй блок try except end; для работы с сетью. Ну а на счет Winsock - используй только какую нибудь обертку для работы с Winsock, в "сыром" виде использовать не стоит.
     
  13. Vet

    Vet New Member

    Joined:
    3 Feb 2006
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Тогда код что ли покажи, а то так долго можно писать.