Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2015, 13:32   #1
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию Зависание Synapse

Всем привет! Создаю HTTP при создании потока
Код:
   HTTP := THTTPSend.Create;
   HTTP.Timeout:=5000;
   HTTP.Sock.SetTimeout(5000);
   HTTP.Sock.ConnectionTimeout := 5000;
   HTTP.Sock.InterPacketTimeout := false;
   HTTP.KeepAlive := false;
   HTTP.Sock.NonBlockMode := true;
заполняю заголовки и Юзер агента
Код:
  HTTP.Clear;
  HTTP.Protocol := '1.1';
  HTTP.UserAgent := 'Opera';
  HTTP.Headers.Add('Accept: */*');
  HTTP.Headers.Add('Accept-Language: ru');
  HTTP.Headers.Add('Accept-Encoding: gzip, deflate');
вот так посылаю HTTPS запрос
Код:
HTTP.HTTPMethod('GET', 'https:\\мой урл');
проблема в том что время от времени зависает, закрыв программу MadExcept показывает такой код
Код:
7790f8ba +00e ntdll.dll                           NtWaitForSingleObject
757970f7 +06e WS2_32.dll                          WSARecv
72ad17d6 +02e wsock32.dll                         recv
75793063 +07c WS2_32.dll                          WSAIoctl
0067b2ee +072 prog.exe blcksock     3976   +8 TTCPBlockSocket.RecvBuffer
0067711c +0b0 prog.exe blcksock     2360  +51 TBlockSocket.RecvPacket
0067736b +097 prog.exe blcksock     2429  +13 TBlockSocket.RecvTerminated
00677546 +03a prog.exe blcksock     2480   +2 TBlockSocket.RecvString
0067d203 +b17 prog.exe httpsend      580 +185 THTTPSend.HTTPMethod
Подскажите пожалуйста как решить проблему.Заранее спасибо.
D_E_N вне форума Ответить с цитированием
Старый 08.01.2015, 13:37   #2
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Обычная ситуация. Исключение внутри потока. Результат - зависание потока. При обращении к зависшему потоку из основного крах программы.
WinCoder вне форума Ответить с цитированием
Старый 08.01.2015, 13:47   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Обычная ситуация. Исключение внутри потока. Результат - зависание потока. При обращении к зависшему потоку из основного крах программы.
Я бы больше сказал, что это задержка ответа сервером.
Человек_Борща вне форума Ответить с цитированием
Старый 08.01.2015, 13:49   #4
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
Обычная ситуация. Исключение внутри потока. Результат - зависание потока. При обращении к зависшему потоку из основного крах программы.
Программу завершаю я сам, вылетает исключение как я понимаю показывает где висит. А зависший поток может висеть долго, незнаю где уже выставить таймаут чтоб не зависал поток.
D_E_N вне форума Ответить с цитированием
Старый 08.01.2015, 13:50   #5
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Я бы больше сказал, что это задержка ответа сервером.
Подскажите, а как ней бороться?
D_E_N вне форума Ответить с цитированием
Старый 08.01.2015, 13:56   #6
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Программу завершаю я сам
Не стоит развивать в себе манию величия.
Код:
Close <> завершил сам
WinCoder вне форума Ответить с цитированием
Старый 08.01.2015, 14:02   #7
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
Не стоит развивать в себе манию величия.
Код:
Close <> завершил сам
да я не развиваю в себе манию величия, просто поток висит, а какой толк от зависшего потока. Я и щелкаю красный крестик Подскажи пожалуйста как сделать чтоб он не зависал?
D_E_N вне форума Ответить с цитированием
Старый 08.01.2015, 14:09   #8
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Я и щелкаю красный крестик
После чего программа начинает очистку оперативной памяти, и не может очистить участок, занятый умершим потоком, так как не уничтожены ссылки на этот участок. В результате крах в виде окон с матами программы.
Цитата:
Подскажи пожалуйста как сделать чтоб он не зависал?
Найти и исправить ошибку. Могу только сказать, что она сидит внутри потока.
WinCoder вне форума Ответить с цитированием
Старый 08.01.2015, 14:20   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Подскажите, а как ней бороться?
Никак. Это сервер задерживает свой ответ.
Человек_Борща вне форума Ответить с цитированием
Старый 08.01.2015, 14:23   #10
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Человек_Борща Ну почему же ни как? Есть таймауты ожидания ответов сервера. Есть обработка критических секций кода. Есть, в конце концов, исправление ошибок логики. Бороться можно и нужно. Другое дело что это чуть чуть посложнее, чем дебаг основного потока. Правильный поток даже в момент отключения интернета не уходит в зависание. Причём в любой точке выполнения.
WinCoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание alexey_kip Visual C++ 6 31.03.2012 16:27
Synapse FanRa3 Общие вопросы Delphi 1 09.12.2010 21:06
зависание DeDoK Работа с сетью в Delphi 7 17.08.2010 09:56
Непонятное зависание. DIMANJ Операционные системы общие вопросы 20 18.11.2009 17:08
Зависание JRcoker Общие вопросы Delphi 8 06.08.2008 08:29