Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.01.2017, 20:08
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание Как избавится от зависания?

Ребята всем привет
дело такое программа при запуске должен проверить имеет ли прога доступ к определенному серверу или нет
дело в том что когда доступ имеется то все ок
а когда доступа нету программа зависает на несколько секунд а потом выдает сообщение что сервер не доступен

как избавить его от зависания?

Код:
const
  INTERNET_CONNECTION_MODEM = 1;
  INTERNET_CONNECTION_LAN = 2;
  INTERNET_CONNECTION_PROXY = 4;
  INTERNET_CONNECTION_MODEM_BUSY = 8;
var
  dwConnectionTypes: DWORD;
  iTime: integer;
begin
 dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
    INTERNET_CONNECTION_PROXY;
  if IsConnectedToInternet(@dwConnectionTypes) then
  begin
    iTime := PingHost('127.0.0.1');
    if (iTime = strtoint('-1')) or (iTime > 200) then
    begin
      form1.label1.Caption:='NOT Connected!';
    end
    else
    begin
      form1.Label1.Caption := 'Connected:';
    end;
  end;

Если этот отрывок запустить в onCreate видно что программа зависает потому что рядом с значком курсора появляется песочные часы

пробовал даже запустить это в отдельном потоке с приоритетом tpHighest все равно зависает.

как то можно избавиться от зависания?
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #2  
Старый 21.01.2017, 20:16
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Уже который раз как только пишу о помощи находится ответ
выяснил висит оно здесь
iTime := PingHost('127.0.0.1');
и если после него добавить
Application.ProcessMessages;

то все ок!
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #3  
Старый 21.01.2017, 21:17
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Выполняй в отдельном потоке.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter