Как единоразово запустить выполнение в интервале времени?

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
Шаблон крутится без остановки и требуется чтобы в определенное случайно выбранное в заданном интервале времени выполнялась дополнительная ветка, но только один раз.

Например во входных настройках указываем 9.00 и интервал - 1 час. Значит в случайное время от 8.30 до 9.30 шаблон должен обработать дополнительно ещё одну ветку и при этом как-то запомнить что задача выполнена и до следующего периода (например до вечера) она больше не будет выполняться.

Как такое лучше организовать? Записывать в txt все эти временные отметки с разными флагами или есть вариант изящнее?
 

molotok

Client
Регистрация
17.04.2015
Сообщения
733
Благодарностей
358
Баллы
63
База SQLite
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
Нет смысла подключать БД только ради записи 3х строк.

Что-то у меня велосипедище пока какое-то получается...
Шаблон в среднем работает 10-15 минут.
Сначала привожу большой временной интервал в 1 час в случайный маленький в 15-20 мин. Записываю его в TXT.
При каждом запуске шаблона считываю нужную строку и проверяю DateNow попадает ли в этот маленький интервал. Если попадает, то выполняю действие и записываю в TXT - 0. При след. запуске, если 0 и интервал от DateNow и заданным часом более получаса, то опять генерирую интервал и записываю. И постоянно приходится перезаписывать. Хрень какая-то((
 
Последнее редактирование:

Nord

Client
Регистрация
22.03.2012
Сообщения
2 406
Благодарностей
1 473
Баллы
113
Делал похожее.
Нужно было чтоб шаб сработал в интервале между 7 и 8 утра, либо не сработал вообще. Шаб выполняется в среднем 10 минут.
В планировщике Windows стартуем батник выполнения шаблона на 7 утра.
Второй батник СТОП ставим на 8.
Вначале шаблона генерируем случайное число от 0 до 1, и от 0 до 3000. Если 0 - завершаем шаблон, 1 - продолжаем. Ставим паузу на второе число. Шаблон запустится максимум в 7:50 и успеет отработать, если не - батник его прибьет.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
это однопоточное или многопоток?
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
с глобальными переменными и локом можно было бы поиграться - если не с файлами
 
  • Спасибо
Реакции: Alex733

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
Пишем второй шаблон который создаст в нужное время файл, запускаем его по расписанию.
Первый шаблон постоянно проверяет наличие файла, есть, удалил файл и пошел налево, нет - пошел направо.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
Пишем второй шаблон который создаст в нужное время файл, запускаем его по расписанию.
Т. к. будет клиентский продукт, то нужно ограничиться одним шаблоном, чтобы не переплачивать и не добавлять новых сущностей в бокс.
В планировщике Windows стартуем батник выполнения шаблона на 7 утра.
По указанной выше причине такое тоже не подойдёт.
это однопоточное или многопоток?
Однопоточное.
с глобальными переменными и локом можно было бы поиграться - если не с файлами
Про лок не понял.
Ну вот создам я глобальные переменные, но юзер может закрыть бокс и они обнулятся и тогда в интервале возможно двойное исполнение действия.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
если бокс может закрываться - тогда только с записью в файл
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113
Привязать txt файл к списку и писать туда строки - интервалы в которые была выполнена доп. ветка ... сам факт наличия такого интервала в списке говорит о том что выполнять доп. ветку ненужно
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
Привязать txt файл к списку и писать туда строки - интервалы в которые была выполнена доп. ветка ... сам факт наличия такого интервала в списке говорит о том что выполнять доп. ветку ненужно
В итоге решил несколько иным образом.
Читаю файл и там построчно три нуля (у меня задача обеспечить ровно три запуска в сутки).
Вычисляю в цикле из 3-х итераций попадает ли текущая дата в интервал от одной из трех заданных + 1 час. Если попадает, то пишу 1 в позицию этого времени и возвращаю флаг к началу доп. действия.
При повторном попадании в этот интервал, прочитав файл и получив при попадании в этот интервал 1, ничего не происходит, при этом если текущее время не попадает в интервал, то пишем в текстовик 0.

В принципе решение рабочее, но не красивое))
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)