Большой Воронежский Форум
» Программирование>помогите разобраться с компонентом TTimer
zhekan 20:46 15.04.2007
Вот мой кусочек задания:

На обрабатывающий участок цеха поступают детали. Интервал между моментами поступления деталей составляет в среднем 10 мин . Через каждые два часа поступление деталей прерывается ровно на 15 мин; обработка деталей, уже поступивших на участок, в это время не прекращается.

вопрос такой, можно ли это реализовать с помошью компонента TTimer? И если можно то как?!
А может есть ещё какие то варианты решения этой задачи, подскажите пожалуйста!!!
Mao 09:11 16.04.2007
Имхо, нет смысла смотреть на то, в каком режиме поступают детали, обед ли там, перерыв на 15 минут. Тем более, что поступают они не точно раз в 10 минут, а примерно.
Таким образом я вижу два возможных варианта:
1. периодический опрос (таймер раз в минуту, раз в тридцать секунд или еще с какой-то заданной периодичностью опрашивает очередь, в которую попадают детали, если она не пуста, выбираем деталь из очереди, запускаем процедуру обработки).
2. создание события. При поступлении детали возникает событие, которое и запускает обработчик. Как создавать события описывать тут не буду, RTFM.
имхо, 2-ое решение более правильное решение, но более трудоемкое, поэтому выбор варианта зависит от времени разработки, денег и т.д.
J++ 09:28 16.04.2007
TTimer посылает событие OnTimer (кажется так оно называется) через опред. время, какое - устанавливаешь ты в его свойстве.

Поэтому можно по событию от таймера опрашивать - поступило ли что-то там на обрабатывающий участок, и надо ли что-то обрабатывать.

Раз у тебя В СРЕДНЕМ поступление идет раз в 10 или 15 минут, можно выставить таймер примерно на 5 минут, и по событию делать опрос.

Иногда будет получаться, что поступило, скажем, 2 детали за 5 минут (например одна в 0 минут, другая в 4 минуты 30 сек), и вторая "увидится" опросом только через 30 сек после своего поступления (когда таймер сработает 2-й раз).

Если это не критично, то все ОК. Если же не допускается задержка обработки детали даже на 30 сек, то можно ставить интервал таймера например 30 сек, или 15 сек, или даже 1 сек.

Крутить же ПОСТОЯННЫЙ цикл опроса в этом случае, ИМХО нерационально. Он же будет происходить ахрененное кол-во раз в секунду, зачем такое нужно. Даже если делать цикл опроса со sleep(), все равно тогда уж лучше таймер.
IT_Prof 17:48 18.04.2007
самый простой вариант решения - сделать 3 таймера
1) бодет срабатовать каждые 10 минут
2) будет срабатовать каждые 2 часа
3) срабатывает каждые 15 минут

далее несложный алгоритм
1) изначально включены только первые 2 таймера, как тока срабатовает второй, то выключаеться и он и первый и начинает работать третий
2) как тока срабатывает третий, то он останавливаеться и начинают работать первые 2...
вот, впринципе и всё.... тока время второго таймера желательно ставить чуть больше 2 часов(т.к. кратно 10 минутам) на пару секунд...

Можно это дело реализовать с помощью одного таймера с использованием глобальных переменных(счётчиков), но мне первый вариант больше по душе....
Если нужен код иль ещё чаго-нибудь, пиши в личку... чёньть придумаем
IT_Prof 10:13 20.04.2007
простейший пример решения
Вверх