Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потоки [D6, XP]


Страницы:   1 2 3

image ©   (2007-01-31 10:10:00) 

Подскажите пожалуйста как правильно переопределить процедуры Execute и Synchronize для потока создаваемого в runtime. Имеется компонент на основе TImage двумя TLabel созданный во время работы приложения и необходимо добавить туда TThread для пинга устройств. TThread добавил без проблем, а вот как объявить вышеуказанные процедуры - не знаю.


image   (2007-01-31 12:19:00) [21]

Где, в каком месте программы?


Сергей М.   (2007-01-31 12:05:00) [22]

Ну и что мешает "у тебя" объявить поле
FMyThread: T MyThread

?


image   (2007-01-31 12:04:00) [23]

Там

Type
TMyThread=Class(TThread)
   private
........

а у меня

Type
TMyImage=Class(TImage)
   private
     FMyThread : TThread;


Сергей М.   (2007-01-31 11:58:00) [24]


> image   (31.01.07 11:52) [18]


Тебе же в [13] дан пример - что не понятно ?


image   (2007-01-31 11:52:00) [25]

Имеется код:

type
 TStation = class(TImage)
   private
     FThread : TThread;
.....................

Как мне правильно объявить/создать процедуры Execute и Synchronize?


image   (2007-01-31 11:37:00) [26]


> и что вообще значит "компонент на основе TImage" ?


> type
>  TStation = class(TImage)
>    private
>      FThread : TThread;
   ................


Palladin   (2007-01-31 11:33:00) [27]

и что? создавай этот поток в конструкторе твоего image да пускай в свободное плавание, на деструкторе останавливай и уничтожай... в чем проблема то?

и что вообще значит "компонент на основе TImage" ?


Сергей М.   (2007-01-31 11:32:00) [28]


> image   (31.01.07 11:14) [12]


И все же, imho, "пинг" тут нужен как корове седло.

Состояние хоста точно так же оперативно выясняется по таймаут-отказам сессионного транспортного механизма или по исключениям KeepAlive-механизма.


image   (2007-01-31 11:28:00) [29]


> Palladin ©   (31.01.07 11:25) [13]

Спасибо за ответ, но у меня компонент на основе TImage, и в него нужно встроить TThread.


Palladin   (2007-01-31 11:25:00) [30]

Type
TMyThread=Class(TThread)
 Protected
  Procedure SyncProc1;
  Procedure SyncProc2;
  Procedure Execute; Override;
End;

Procedure TMyThread.Execute;
Begin
While (Not Terminated) and (SomeOtherCondition) Do
 Begin
  ....
  If IsNeededSyncProc1 Do Synchronize(SyncProc1);
  If IsNeededSyncProc2 Do Synchronize(SyncProc2);
  ....
 End;
End;

Procedure TMyThread.SyncProc1;
Begin
SomeWorkInMainAppThread;
End;

Procedure TMyThread.SyncProc2;
Begin
SomeOtherWorkInMainAppThread;
End;


image   (2007-01-31 11:14:00) [31]


> Оперативней будет открыть постоянную сессию прикл.коммуникации
> с интересующим хостом и ловить отказы этой сессии, которые
> и будут фактами перехода хоста в недоступное состояние.
> На то есть различные KeepAlive-механизмы.

Время на пинг не тратится. Моя программа наподобие NetView постоянно контролирует состояние всех хостов одновременно, через определенные промежутки времени, и в случае отказа какого-нибудь сигнализирует изменением цвета картинки и если в настройках указано, то - звуком. Процесс контроля не прерывается. Так как же на счет моего вопроса?
Как на счет Execute и Synchronize?


Сергей М.   (2007-01-31 11:02:00) [32]


> Далее определяется причина


Предположим, юзер интересующего хоста настроил и включил (случайно ли, по злому ли умыслу - не столь важно) файрвол и блокировал при этом входящие icmp-запросы, соответственно твой "пинг" показывает тебе недоступность того хоста, в то время как хост на самом деле доступен. Что дальше ?


> необходима оперативность


Да уж какая там оперативность - сначала тратить время на "пинг" хоста, а затем собственно открывать/закрывать сессию прикладной коммуникации с ним)

Оперативней будет открыть постоянную сессию прикл.коммуникации с интересующим хостом и ловить отказы этой сессии, которые и будут фактами перехода хоста в недоступное состояние. На то есть различные KeepAlive-механизмы.


image   (2007-01-31 10:51:00) [33]

Далее определяется причина. Если наше оборудование, то предпринимаются соответствующие меры(перезагрузка, замена), а если связь, то поднимаем связистов. Дело в том, что сейчас поезда не отправляются пока не будут переданы данные в управление, а за простой поезда... Поэтому необходима оперативность.


Сергей М.   (2007-01-31 10:48:00) [34]


> возникает необходимость в постоянном контроле состояния
> хостов


Ну, предположим, ты убедился, что такой-то хост в некий момент времени доступен или не доступен. Что дальше ? Как сей факт дальше используется ?


image   (2007-01-31 10:45:00) [35]


> А в чем заключается суть контроля ? Просто в периодическом
> определении факта доступности/недоступности того или иного
> хоста ?

Да, ты прав. У нас удаленка на DSL-модемах, а качество линий связи сами знаете какое. Поэтому возникает необходимость в постоянном контроле состояния хостов.


Сергей М.   (2007-01-31 10:41:00) [36]


> Для контроля


А в чем заключается суть контроля ? Просто в периодическом определении факта доступности/недоступности того или иного хоста ?


image   (2007-01-31 10:37:00) [37]

Для контроля сети на работе. Иммиджи - это картинки изображающие устройства, TLabel-ы  - айпи и имена, а потоки для сканирования.


Сергей М.   (2007-01-31 10:33:00) [38]


> У меня на форме до 80 компонентов и каждый пингует свой
> айпи


Каких ? И зачем такая куча оных, если вполне можно обойтись максимум десятком ?


image   (2007-01-31 10:31:00) [39]


> И не так уж необходимо именно TThread - компонент TIdICMP
> сам все сделает, там все уже готово для "пинга"


У меня на форме до 80 компонентов и каждый пингует свой айпи. Не будет ли зависать окно программы?


Сергей М.   (2007-01-31 10:28:00) [40]


> необходимо добавить туда TThread для пинга устройств


Не так уж и необходимо. На ХР успешно работает асинхронный вариант - IcmpSendEcho2()

И не так уж необходимо именно TThread - компонент TIdICMP сам все сделает, там все уже готово для "пинга"


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо