|
Вопрос # 484/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
помогите разобраться с компонентом TTimer
вот мой кусочек задания:
На обрабатывающий участок цеха поступают детали. Интервал между моментами поступления деталей составляет в среднем 10 мин . Через каждые два часа поступление деталей прерывается ровно на 15 мин; обработка деталей, уже поступивших на участок, в это время не прекращается.
вопрос такой, можно ли это реализовать с помошью компонента TTimer? И если можно то как?!
А может есть ещё какие то варианты решения этой задачи, подскажите пожалуйста!!!
С уважением, Бабунов
 |
Вопрос задал: Бабунов (статус: Посетитель)
Вопрос отправлен: 15 апреля 2007, 21:48
Состояние вопроса: решён, ответов: 4.
|
Ответ #1. Отвечает эксперт: Николай Рубан
Самый простой способ который пришел в голову такой, возможно не самый рациональный:
советую Вам воспользоваться сразу тремя компонентами типа TTimer.
Timer1 - установите его интервал в 600000, что соответствует 10 минутам.
Timer2 - установите его интервал в 900000, что соответствует 15 минутам.
Timer3 - с интервалом в 7200000 - соответствует 2-м часам.
И соответственно останется верно скомбинировать их в зависимости от условия.
Удачи!!!
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 15 апреля 2007, 22:38
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Помфюк Владимир Степанович
Здравствуйте, Бабунов!
К предыдущему ответу:
Вместо третьего таймера лучше делать подсчёт в первом таймере.
Варианты решения может и есть, но Вы же не сформулировали задачу. Кроме того у Вас есть загадочная фраза "обработка деталей, уже поступивших на участок, в это время не прекращается", тоесть для полной картины ещё нужно время обработки каждой порции.
Ответ #3. Отвечает эксперт: Косолапов Дмитрий Юрьевич
А мне кажется, всю обработку надо выполнять в цикле (без использования компонента Timer), в конце итерации - задержка с использованием процедуры Sleep с рандомным количеством миллисекунд (чтобы в среднем получалось 10 секунд), ну и отдельно учитывать общее время, чтобы ставить задержку на 15 минут каждые два часа.
Ответ #4. Отвечает эксперт: Новаковский Юрий Аврамович
Здравствуйте, Бабунов!
Хочу заметить, что TTimer штука очень неточная,погрешность зависит от загрузки компа.
При интервале <=1сек приемлемо, а вместо 10 минут Вы можете получить и 9 и 11 и даже 12 или 8.
По этому я предлагаю: настроить таймер на 1000=1сек, в начале интервала считывать с помощью функции Time системное время, записать его в переменную типа TDateTime и каждую секунду (чаще или реже) опять получить системное время, из него вычесть то что запомнили, получится число секунд от начала интервала, когда разница досигнет или превысит 600, прошло 10 минут, причем весьма точно. Ведь нет разницы на каком цикле таймера достигнут конец интервала на 600 или 650, все зависит от системных часов.
Удачи!
Мини-форум вопроса
Всего сообщений: 0.
31 января 2011, 19:17: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|