Форум: "Прочее";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];
ВнизOnTimer или где? Найти похожие ветки
← →
Германн © (2010-01-03 04:47) [0]Никак не могу понять где лучше включать в главной форме таймер, обработчик которого может вызвать диалог. В OnCreate не получилось. В OnShow тоже. Спасло только PostMessage из OnShow.
← →
Marser © (2010-01-03 04:59) [1]А чем OnShow плох? Если Enabled уже true, то при следующих срабатываниях ничего не изменится (см. SetEnabled)
← →
Германн © (2010-01-03 05:05) [2]
> Marser © (03.01.10 04:59) [1]
>
> А чем OnShow плох?
А я и сам не пойму, чем он плох. Вот в чём проблема. :(
← →
Marser © (2010-01-03 05:14) [3]
> Германн © (03.01.10 05:05) [2]
>
>
> > Marser © (03.01.10 04:59) [1]
> >
> > А чем OnShow плох?
>
> А я и сам не пойму, чем он плох. Вот в чём проблема. :(
А может, ошибка не там?
procedure TForm1.Timer1Timer(Sender: TObject);
begin
caption:=inttostr(gettickcount);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
timer1.Enabled:=true;
end;
end.
Делфи 7, всё работает :-)
← →
Германн © (2010-01-03 05:21) [4]
> Делфи 7, всё работает :-)
В том то и дело, что так всё работает.
А у меня в обработчике события таймера вызывается функция/процедура, которая работает с внешним железом.
← →
Marser © (2010-01-03 05:23) [5]Что я могу сказать... Ошибка в 17-й строке :-))))
← →
Кто б сомневался © (2010-01-03 05:27) [6]Германн © (03.01.10 04:47) [0]
Ты такие сложные вопросы задаешь в 5 часов ночи... :)
← →
Германн © (2010-01-03 05:27) [7]
> Marser © (03.01.10 05:23) [5]
>
> Что я могу сказать... Ошибка в 17-й строке :-))))
>
Дык я это знаю! Но не могу найти эту строку! :)
← →
Германн © (2010-01-03 05:40) [8]
> Кто б сомневался © (03.01.10 05:27) [6]
>
> Германн © (03.01.10 04:47) [0]
>
> Ты такие сложные вопросы задаешь в 5 часов ночи
Когда смог, тогда и задаю. :)
Однако форум ДМ работает круглосуточно, без перерывов на обед и без выходных! Надеюсь это вам очевидно. Но никакой гарантии ответа сей форум не представляет. И это я понимаю прекрасно.
Torry меня поймёт. Моя меньшая заболела. Что, как и почему - неизвестно. Дежурю. Одновременно "подчищаю", что могу.
← →
Dimka Maslov © (2010-01-03 11:05) [9]Я для этих целей пользуюсь CreateWnd формы.
← →
ЧукиПуки (2010-01-03 11:44) [10]А у меня в обработчике события таймера вызывается функция/процедура, которая работает с внешним железом.
А при чем тут запуск таймера к обработчику события таймера?
← →
Anatoly Podgoretsky © (2010-01-03 13:18) [11]> Германн (03.01.2010 04:47:00) [0]
У тебя ошибка в программе.
← →
Anatoly Podgoretsky © (2010-01-03 13:20) [12]> Германн (03.01.2010 05:40:08) [8]
Упор не на 5 часов, а на такие сложные.
← →
b/@. © (2010-01-03 14:05) [13]
OnActivate
← →
Плохиш © (2010-01-03 14:13) [14]Какая интересная филосовская тема :-)
← →
Marser © (2010-01-03 14:51) [15]
> Anatoly Podgoretsky © (03.01.10 13:18) [11]
>
> > Германн (03.01.2010 04:47:00) [0]
>
> У тебя ошибка в программе.
А что, мем про 17-ю строку уже не в моде? :-)
← →
Джо © (2010-01-03 15:28) [16]В OnCreate запускаем Таймер1. Его период срабатывания — 30 секунд, скажем. В обработчике Таймера1 запускаем Таймер2 (обработчик которого «работает» с диалоговыми окнами) и выключаем Таймер1
8-)
← →
korneley © (2010-01-03 16:12) [17]
> Джо © (03.01.10 15:28) [16]
Хоть неуловим, но прав :) А я бы даже и OnCreate не трогал. Задал бы в дизайн-тайме таимеру (опа, тавтология) Enable - true, ну и флагов своих немножко :))) Пока горя не знал.
← →
Германн © (2010-01-04 03:30) [18]17-ю строку так и не нашел :(
Шутки понял.
Но PostMessage вроде работает без нареканий, а меня пока заинтересовала проблема/алгоритм "двойного" сглаживания/усреднения данных, поступающих от внешнего железа. Даже уже начал печатать новый вопрос сюда, но вовремя остановился.
← →
Polevi © (2010-01-04 10:56) [19]Я видел программу в которой данные сканера штрих-кода (ком порт) читались помощью 2 таймеров. Разработчик не удосужился почитать документацию к железке, и считал что если устройство не возвращает данные какое-то время, то наверное их у него больше нет. Когда я его ткнул в возврат каретки которыми устройство завершает код, он очень расстроился
← →
KilkennyCat © (2010-01-04 11:01) [20]можно вызывать все, что угодно, где угодно и когда угодно, если перед вызовом делать проверку на доступность.
← →
Marser © (2010-01-04 13:42) [21]
> Polevi © (04.01.10 10:56) [19]
>
> Я видел программу в которой данные сканера штрих-кода (ком
> порт) читались помощью 2 таймеров. Разработчик не удосужился
> почитать документацию к железке, и считал что если устройство
> не возвращает данные какое-то время, то наверное их у него
> больше нет. Когда я его ткнул в возврат каретки которыми
> устройство завершает код, он очень расстроился
За работу с внешним устройством в основном потоке, так называемому "разработчику" вообще говоря следует аккуратно отрывать голову. ИМХО, конечно.
← →
test © (2010-01-04 16:00) [22]procedure TForm1.FormCreate();
begin
//сначала выполняем создание всего и вся
inherited;
//потом можно манипулировать созданными объектами
timer1.Enabled:=true;
end;
//Имхо конечно
← →
test © (2010-01-04 16:07) [23]Marser © (04.01.10 13:42) [21]
Программа может быть и службой которая что то быстро выполнила и закрылась.
← →
Marser © (2010-01-04 16:17) [24]
> test © (04.01.10 16:07) [23]
>
> Marser © (04.01.10 13:42) [21]
> Программа может быть и службой которая что то быстро выполнила
> и закрылась.
:-)
Службы, как правило, UI не имеют ;-)
← →
Германн © (2010-01-04 17:08) [25]
> Marser © (04.01.10 13:42) [21]
>
> За работу с внешним устройством в основном потоке, так называемому
> "разработчику" вообще говоря следует аккуратно отрывать
> голову. ИМХО, конечно.
Ну тут ты не прав, тезка. Чаще бывает наоборот. За синхронную работу в доппотоке нужно отрывать руки. :)
← →
Вариант (2010-01-05 07:31) [26]
> OnTimer или где?
> Германн © (03.01.10 04:47)
> Германн © (04.01.10 17:08) [25]
http://delphimaster.net/view/1-1262076709/
Германн © (05.01.10 02:11) [28]
← →
korneley © (2010-01-05 09:48) [27]
> Германн © (04.01.10 17:08) [25]
> Чаще бывает наоборот.
> За синхронную работу в доппотоке нужно отрывать руки. :
> )
Маленькая поправочка: за не синхронную ;)
← →
ANB (2010-01-05 09:59) [28]
> Ну тут ты не прав, тезка. Чаще бывает наоборот. За синхронную
> работу в доппотоке нужно отрывать руки. :)
+1)
> Германн ©
Через какой порт в железку лезешь ?
← →
Вариант (2010-01-05 10:25) [29]
> korneley © (05.01.10 09:48) [27]
> Маленькая поправочка: за не синхронную ;)
И то и другое имеет право на жизнь - зависит от задачи. В доп. потоке можно работать как в синхронном , так и в асинхронном режиме, если умеючи конечно. Так же на это могут быть наложены ограничения самими устройствами
Могут быть задачи, где это имеет смысл делать и в основном потоке. Но насколько мне известно это сводится к задачам теста своего кода или простого мониторинга, или опять таки простого чтения и записи, где синхронная запись или чтение не ведут к существенным задержкам (например чтение или запись байта из/в LPT). В противном случае мы можем видеть "противное" зависание GUI (основного потока). И в то же время асинхронная работа например с сокетами в приложении-сервере, обслуживающего одновременно сотни клиентов может подразумевать работу в дополнительном потоке или потоках, где один поток обслуживает сразу несколько десятков клиентов.
← →
Marser © (2010-01-05 13:28) [30]
> Могут быть задачи, где это имеет смысл делать и в основном
> потоке. Но насколько мне известно это сводится к задачам
> теста своего кода или простого мониторинга, или опять таки
> простого чтения и записи, где синхронная запись или чтение
> не ведут к существенным задержкам (например чтение или запись
> байта из/в LPT). В противном случае мы можем видеть "противное"
> зависание GUI (основного потока). И в то же время асинхронная
> работа например с сокетами в приложении-сервере, обслуживающего
> одновременно сотни клиентов может подразумевать работу в
> дополнительном потоке или потоках, где один поток обслуживает
> сразу несколько десятков клиентов.
Вот именно, собстна. Ничего не имею против периодических тестов, если есть 95% уверенность (а как говорят в Моссаде, 98% вам и Господь не обеспечит), что данные будут там в срок, а драйвер надёжен, и так далее... В общем, если вы читаете в основном потоке, у вас всегда есть вероятность, что он умрёт.
← →
Вариант (2010-01-05 14:12) [31]
> Marser © (05.01.10 13:28) [30]
В Моссаде могут говорить, что угодно -я их не читаю, по крайней мере пока они не пишут техническую документацию.
Речь о синхронной работе с устройством? В общем я почти согласен, почти... Что касается периодических или циклических тестов наличия данных для чтения например в буфере порта - я их не люблю. Хотя так же считаю, что такое может иметь в определенном каком-либо случае место, как вариант в документации MSDN или в специальных областях, которые правда не касаются.
Сам пишу обычно работу с устройствами в доп. потоке, по событиям или в режиме ожидания данных (клиент TCP, блокирующий сокет например).
Но устройство это и диск - всегда ли вы читаете к примеру ini файл в дополнительном потоке или используя операции асинхронного чтения для этого? не пользуетесь TiniFile?
Есть режимы работы с утройством например типа COM порт, где чтение или запись не приведет к задержке, а немедленно возвратит управление. Есть задачи, где с устройства вообще не надо читать, а только выставить управляющие сигналы (RTS,DTR).
В общем я не за и не против сторонников того или иного способа работы с оборудованием, с портами. Я считаю всякому решению свое место. Есть наработанные шаблоны и классы у меня - работа с устройством в отдельном потоке - я ими и стараюсь пользоваться. Но сказать, что нельзя использовать например ассинхронную работу в основном потоке - так категоричен не буду, технически корректно можно.
Поэтому я обычно смотрю задачу, ее предназначение и с чем работаю.
← →
Marser © (2010-01-05 15:01) [32]
> Есть режимы работы с утройством например типа COM порт,
> где чтение или запись не приведет к задержке, а немедленно
> возвратит управление. Есть задачи, где с устройства вообще
> не надо читать, а только выставить управляющие сигналы (RTS,
> DTR).
>
Это приятные частности, на практике встречаются не всегда :-)
Я съел собаку в работе с не всегда предсказуемыми устройствами через последовательный порт. Без изысков, RX/TX, но много и со множеством нюансов.
Вот уже полтора года, как я там не работаю, но мои принципы там всё ещё остаются при деле... :-)
← →
Германн © (2010-01-05 18:27) [33]
> ANB (05.01.10 09:59) [28]
>
>
> > Ну тут ты не прав, тезка. Чаще бывает наоборот. За синхронную
> > работу в доппотоке нужно отрывать руки. :)
>
> +1)
>
>
> > Германн ©
>
> Через какой порт в железку лезешь ?
>
Сейчас не через порт. А то что ты процитировал было связано с СОМ-портом.
← →
Германн © (2010-01-06 02:51) [34]
> Вариант (05.01.10 07:31) [26]
>
>
Почувствуй разницу!
Мой вопрос задан в "Прочее". А не в "Основной" и даже не в "Начинающим".
И это был скорее не вопрос, а крик души! Измученной. :)
← →
Вариант (2010-01-06 04:45) [35]
> Германн © (06.01.10 02:51) [34]
Cлово
> ДАЖЕ
- оценил
← →
korneley © (2010-01-06 10:45) [36]
> Marser © (05.01.10 13:28) [30]
> ... В общем, если
> вы читаете в основном потоке, у вас всегда есть вероятность,
> что он умрёт.
Если умрёт доп. поток, тоже радости мало :) Вообще, коллеги, говорим об одном, но разными словами :))) А как вам ситуация, когда устройство существует в одном экземпляре, да и тот уезжает завтра в Читу. Приложение им управляющее ещё даже не проектировалось :( А через две недели оно (устройство) должно нормально функционировать, т.к. это спортивное табло и дата проведения соревнований уже определена. Причём совсем не факт, что контроллер там корректно прошит. Вот это реально, жесть... Случай не выдуманный, из личного опыта.
← →
Германн © (2010-01-07 03:06) [37]Как ни старался, так и не смог ни найти 17-ю строку, ни создать тестовый проект. :(
← →
Германн © (2010-01-12 01:23) [38]Нет в моей проге 17-й строки. Эт точно!
Есть изъян в идее, связанный с плохим (нетвёрдым) знанием работы приложения в ОС Windows. Бум исправлять. (Возможно бум задавать другие глупые вопросы на ДМ :)
← →
Anatoly Podgoretsky © (2010-01-12 01:37) [39]> Германн (12.01.2010 01:23:38) [38]
У тебя программа из 16 строк, тогда ты точку не поставил после end.
← →
Германн © (2010-01-12 02:01) [40]
> У тебя программа из 16 строк
Ты считаешь не правильно.
P.S. В нек-х странах очень не любят число 13. У них нет нигде 13 этажей, 13 квартир и т.п.
А у меня просто после 16-й строки всегда идет 18-я! А то что IDE показывает, так это не моя проблема.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];
Память: 0.58 MB
Время: 0.004 c