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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.06.2012, 19:50
sersoftin sersoftin вне форума
Прохожий
 
Регистрация: 07.06.2012
Сообщения: 8
Репутация: 10
По умолчанию Timer зависает. Почему

вот код
Код:
memo1.Clear;
Process1.CommandLine:='ping -c 1 8.8.8.8';
Process1.Execute;
memo1.lines.LoadFromStream(process1.Output);
Label50.Caption:=copy(memo1.Lines[1],47,6);
if Label50.caption='' then
begin
StatusBar1.Panels.Items[0].Text:='$(B'3'd'Q'd'e'c(B $(B'a'`'U'\']'p'i'V'_'Z'q(B: $(B'_'V'd'e(B';
Button3.Enabled:=True;
Button4.Enabled:=False;
end
else
begin
StatusBar1.Panels.Items[0].Text:='$(B'3'd'Q'd'e'c(B $(B'a'`'U'\']'p'i'V'_'Z'q(B: $(B'V'c'd'n(B';
Button3.Enabled:=false;
Button4.Enabled:=true;
end;
application.ProcessMessages; 

что в нём не так а то программа виснет и пишет типо не отвечает

Последний раз редактировалось sersoftin, 07.06.2012 в 21:40.
Ответить с цитированием
  #2  
Старый 07.06.2012, 20:21
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

что делает метод Process1.Execute?
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #3  
Старый 07.06.2012, 20:24
sersoftin sersoftin вне форума
Прохожий
 
Регистрация: 07.06.2012
Сообщения: 8
Репутация: 10
По умолчанию =>

process1.execute это выполнение команды заданной в process1.comandline
я написал само событие которое выполняется по таймеру
Ответить с цитированием
  #4  
Старый 07.06.2012, 21:23
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

как реализован этот метод? (отдельный поток или основной поток)
F5 на третьей строке, потом F7, F7, F7...
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #5  
Старый 07.06.2012, 21:31
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Долгосрочные операции в таймере лучше не делать. Тут есть разные подходы:
1. Послать сообщение основной программе, затем выполнить нужный код.
2. Выставить флаг и затем ...
3. Стартовать поток и затем он ...
4. и т.д.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 07.06.2012, 21:39
sersoftin sersoftin вне форума
Прохожий
 
Регистрация: 07.06.2012
Сообщения: 8
Репутация: 10
По умолчанию =>

то есть как мне убрать тормоза? отделить это в отдельную процедуру
Ответить с цитированием
  #7  
Старый 07.06.2012, 21:41
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от sersoftin
... отделить это в отдельную процедуру
и запускать таймером. Таймер, естественно, отключить.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 07.06.2012, 21:45
sersoftin sersoftin вне форума
Прохожий
 
Регистрация: 07.06.2012
Сообщения: 8
Репутация: 10
По умолчанию =>

а если мне его выключать нельзя. ну мне нужно что бы постоянно пинговалась сеть. и данные выводились в label каждую секунду или, хотя бы, полторы
Ответить с цитированием
  #9  
Старый 07.06.2012, 21:53
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Выставляй какой-нибудь флаг.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 07.06.2012, 21:57
sersoftin sersoftin вне форума
Прохожий
 
Регистрация: 07.06.2012
Сообщения: 8
Репутация: 10
По умолчанию

объясни что такое флаг и как его поставить а то я этого не знаю. хотя может и знаю но не знаю что это флаг
Ответить с цитированием
  #11  
Старый 07.06.2012, 22:02
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Флаг, любая булеановская переменная, которую выставляешь в True/False в зависимости от потребностей задачи.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #12  
Старый 07.06.2012, 22:17
sersoftin sersoftin вне форума
Прохожий
 
Регистрация: 07.06.2012
Сообщения: 8
Репутация: 10
По умолчанию

а. понял. только вот у меня там условий нету. просто делается пинг и забивается через мемо в label и не от чего это не зависит и происходить должно всегда.
Ответить с цитированием
  #13  
Старый 07.06.2012, 22:28
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В любом случае, таймер не должен выполнять длительные операции сам, а только давать "отмашку" для их выполнения. Продумай алгоритм как лучше организовать, может воспользоваться "нитью" (Thread).
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #14  
Старый 07.06.2012, 22:36
sersoftin sersoftin вне форума
Прохожий
 
Регистрация: 07.06.2012
Сообщения: 8
Репутация: 10
По умолчанию

сейчас попробую
Ответить с цитированием
  #15  
Старый 07.06.2012, 22:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от sersoftin
а если мне его выключать нельзя. ну мне нужно что бы постоянно пинговалась сеть. и данные выводились в label каждую секунду или, хотя бы, полторы

Написать свою реализацию клиента протокола ICMP - это именно он и есть, ping. И тогда можно его пустить в отдельном потоке постоянно и просто событием или CallBack'ом выводить информацию в форму. Лично я бы делал так.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter