|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.06.2008, 03:49 | #1 |
Регистрация: 18.06.2008
Сообщений: 3
|
Событие
Можно ли (и как) написать свое нестандартное событие? Например нужно чтобы форма реагировала на, скажем, сигнал от какой-либо платы (например от сетевой, но может быть и другая).
Вариант писать бесконечный цикл с опросом конкретной платы сразу отпадает, так как форма будет неинтерактивна в это время.. не будет реагировать на нажатие кнопок и т.д. Спасибо. |
18.06.2008, 08:40 | #2 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Если винда посылает сообщение (сигнал от этой платы) приложениям, тогда ловить это сообщение.
Чтобы форма реагировала вставь в цикл Application.ProcessMessages. Или используй таймер, не так систему грузить будет.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
18.06.2008, 10:30 | #3 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Забыл про потоки... кто мешает создать отдельный поток в котором будет опрос платы, а главный поток ( интерфейс ) в это время будет спокойно висет и реагировать на все приходящие сообщения системы... ну а чтобы не было загрузки со стороны отдельного потока делайте вызов в конце цикла например типа sleep(50); и все будет тип топ
|
18.06.2008, 12:41 | #4 |
Регистрация: 18.06.2008
Сообщений: 3
|
Спасибо, попробую.. с потоками пока еще дело не имел, заодно и разберусь.
Проблема в том, что при нажатии кнопки на форме, если запускается процедура с гигантским циклом, то пока цикл не завершится на форме не работают кнопки, да вообще ничего, т.е. я даже не могу принудительно из цикла выйти. Во время него идет сканирование некоторой платы и когда от нее приходит сигнал, на форму в компонент РичТекст должна выводиться некая информация. Так вот она выводится, когда цикл будет завершен, а нужно в процессе. Поэтому я решил длинный цикл заменить на событие (сигнал от платы), которое я бы просто отлавливал и обрабатывал (посылал инфу на компонент РичТекст). |
18.06.2008, 13:59 | #5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Потоки то что вам нужно... почитайте про них, а в особенности про класс TThread и поймете почему и менно потоки )
|
18.06.2008, 14:39 | #6 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
С "некоторыми платами" под Windows мы работаем через драйвер и видим и плату, и драйвер, как файл, к которому вполне применимы "отложенные" чтение и запись - Overlapped IO, которые и предназначены для того, чтобы не приостанавливать вызывающий поток. Если плата обладает какой-то сигнализацией, значит эту её способность должен поддерживать и драйвер и выставлять некий синхросигнал, которого вполне можно ждать в интересующемся им приложении.
|
18.06.2008, 18:53 | #7 |
Регистрация: 18.06.2008
Сообщений: 3
|
Естественно есть и драйвер и процедуры чтения сигналов.. все есть, я просто не знаю как организовать так чтобы форма реагировала на процессы в плате. Т.е. обработчик события у меня есть, нету самого события
Пока месть я сделал через Application.ProcessMessages. Все заработало, но не особенно красиво, так что буду изучать потоки. Спасибо всем! |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как проипсать событие? | Sanek777 | Общие вопросы Delphi | 3 | 10.08.2008 14:48 |
Событие | terminadoor | Общие вопросы Delphi | 13 | 17.07.2008 09:25 |
Событие один раз | Михаил Юрьевич | Общие вопросы Delphi | 4 | 01.04.2008 20:40 |
событие BeforePost | azat | БД в Delphi | 2 | 17.12.2007 15:34 |
Как поймать событие в COM? | den303 | Общие вопросы Delphi | 0 | 13.09.2007 12:06 |