Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1264843822
Vallos
2010-01-30 12:30
2010.04.04
Определение покрытия рабочего стола


15-1263331825
Юрий
2010-01-13 00:30
2010.04.04
С днем рождения ! 13 января 2010 среда


2-1262824902
kyran29
2010-01-07 03:41
2010.04.04
Отправка файла на e-mail


15-1263494897
fford
2010-01-14 21:48
2010.04.04
firebird виснет под Linux


1-1246608128
smirnoff
2009-07-03 12:02
2010.04.04
Обращение из Delphi к DLL написанной на C++





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский