![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потоки [D6, XP]
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 сам все сделает, там все уже готово для "пинга"