Хороший способ запустить событие в определенное время суток?

Предполагая, что 04 является строкой, сделайте parseInt или преобразуйте ее в число перед сравнением или используйте унарный оператор

console.log(selectedExperience.from.split('/')[0])) // 04
let exp = parseInt(selectedExperience.from.split('/')[0],10)

console.log(months)  // [ { value : 1, name: "one"}
                     //   { value: 2, name: "two" }
                     //   { value: 4, name: "four" }] 

console.log(months.find(month => month.value ===exp  ))
.
5
задан PaulB 7 April 2009 в 14:08
поделиться

6 ответов

  • Храните/индексируйте события, отсортированные по тому, когда им затем будет необходимо уделять внимание. Это могло быть в памяти или не, согласно тому, сколько существует, как часто Вы вносите изменения и т.д. Если весь Ваш огонь событий один раз в день, этот список является в основном кольцевым буфером, который только изменяется, когда пользователи изменяют свои события.
  • Запустите таймер, который 'отсчитает' во время события во главе списка. Окружите к следующей минуте, если Вам нравится.
  • Когда таймер стреляет, обработайте все события, которые находятся теперь в прошлом [редактирование - и которые не были уже обработаны], повторно вставьте их в список при необходимости (т.е. если у Вас нет оптимизации "кольцевого буфера"), и установите новый таймер.

Очевидно, когда Вы изменяете набор событий или изменяете время для существующего события, затем Вы, возможно, должны сбросить таймер, чтобы заставить его стрелять ранее. Обычно нет никакого смысла сбрасывающего его для увольнения позже - Вы можете также просто позволить ему уйти и ничего не делаете. И если Вы ставите верхний предел одной минуты, сколько времени таймер может выполнить (или просто иметь 1 минуту повторяющийся таймер), затем можно добраться в 1-минутной точности без когда-либо сброса. Это - в основном Ваша опция 2.

Возможно необходимо ли использовать существующую платформу вместо того, чтобы прокрутить собственное, но я не знаю C#, таким образом, я понятия не имею, что доступно. Я обычно немного опасаюсь идеи установить squillions таймеров, потому что некоторые среды не поддерживают это (или не поддерживайте его хорошо). Следовательно эта схема, которая требует только одного. Я не знаю, имеет ли C# какие-либо проблемы в этом отношении, но эта схема может легко быть расположена для использования O (1) RAM при необходимости, которая не может быть разбита.

4
ответ дан 13 December 2019 в 05:42
поделиться

Это походит на классический случай для службы Windows. Я думаю, что в VS2005/2008 существует тип проекта службы Windows. Сервис вместе с простой базой данных и приложением фронтенда, чтобы позволить пользователям устанавливать триггерные времена был бы всем, в чем Вы нуждаетесь.

Если это не будет изменяться очень часто, Запланированные задачи также опция.

3
ответ дан 13 December 2019 в 05:42
поделиться

Взгляните на Кварц. Сеть. Это - платформа планировщика (первоначально для Java).

4
ответ дан 13 December 2019 в 05:42
поделиться

Я записал несколько программ вдоль этих строк.

Я предлагаю № 2. Все, к чему Вы должны, является содержанием список времен, что события "должны" в, и каждое X количества времени (в зависимости от Вашего разрешения) проверяет Ваш список на "теперь" события. Можно взять некоторую оптимизацию, если можно гарантировать, что список отсортирован, и что каждое событие в списке должно точно однажды. Иначе, если у Вас есть повторяющиеся события, необходимо удостовериться, что Вы покрываете свое окно. То, что я имею в виду, если у Вас есть событие, которое должно в 11:30, и Вы проверяете каждый секунды, затем возможно, что Вы могли проверить в 11:29:59, и затем не снова до 11:31:01, из-за неточности интервалов ЦП. Таким образом, необходимо будет быть уверены, что одна из тех проверок (11:29 или 11:31) все еще берет хит 11:30, и что ТОЛЬКО один из них делает (т.е. Вы не работаете и в 11:29 и в 11:31).

Преимущество, которое этот подход имеет по проверке только на временах, которые Вы знаете, чтобы быть в Вашем списке, это позволяет Вашему списку быть измененным третьими сторонами без Вашего ведома, и Ваш обработчик событий продолжится к 'просто работе'.

1
ответ дан 13 December 2019 в 05:42
поделиться

Самый простой путь состоял бы в том, чтобы, вероятно, использовать планировщик Windows.

Иначе необходимо использовать один из классов Таймера, вычисляя сколько времени до первого события. Этот подход, в отличие от планировщика, позволяет новым событиям быть найденными рабочим процессом (и, возможно, сбрасывая таймер).

0
ответ дан 13 December 2019 в 05:42
поделиться

Проблема с № 1 состоит в том, что количество миллисекунд перед событием может быть слишком большим для хранения в интервале Таймера, и когда количество событий увеличивается, количество таймеров могло стать громоздким.

Я не вижу ничто плохого с № 2, но я выбрал бы второстепенного рабочего или поток.

0
ответ дан 13 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: