Предполагая, что 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 ))
. Очевидно, когда Вы изменяете набор событий или изменяете время для существующего события, затем Вы, возможно, должны сбросить таймер, чтобы заставить его стрелять ранее. Обычно нет никакого смысла сбрасывающего его для увольнения позже - Вы можете также просто позволить ему уйти и ничего не делаете. И если Вы ставите верхний предел одной минуты, сколько времени таймер может выполнить (или просто иметь 1 минуту повторяющийся таймер), затем можно добраться в 1-минутной точности без когда-либо сброса. Это - в основном Ваша опция 2.
Возможно необходимо ли использовать существующую платформу вместо того, чтобы прокрутить собственное, но я не знаю C#, таким образом, я понятия не имею, что доступно. Я обычно немного опасаюсь идеи установить squillions таймеров, потому что некоторые среды не поддерживают это (или не поддерживайте его хорошо). Следовательно эта схема, которая требует только одного. Я не знаю, имеет ли C# какие-либо проблемы в этом отношении, но эта схема может легко быть расположена для использования O (1) RAM при необходимости, которая не может быть разбита.
Это походит на классический случай для службы Windows. Я думаю, что в VS2005/2008 существует тип проекта службы Windows. Сервис вместе с простой базой данных и приложением фронтенда, чтобы позволить пользователям устанавливать триггерные времена был бы всем, в чем Вы нуждаетесь.
Если это не будет изменяться очень часто, Запланированные задачи также опция.
Взгляните на Кварц. Сеть. Это - платформа планировщика (первоначально для Java).
Я записал несколько программ вдоль этих строк.
Я предлагаю № 2. Все, к чему Вы должны, является содержанием список времен, что события "должны" в, и каждое X количества времени (в зависимости от Вашего разрешения) проверяет Ваш список на "теперь" события. Можно взять некоторую оптимизацию, если можно гарантировать, что список отсортирован, и что каждое событие в списке должно точно однажды. Иначе, если у Вас есть повторяющиеся события, необходимо удостовериться, что Вы покрываете свое окно. То, что я имею в виду, если у Вас есть событие, которое должно в 11:30, и Вы проверяете каждый секунды, затем возможно, что Вы могли проверить в 11:29:59, и затем не снова до 11:31:01, из-за неточности интервалов ЦП. Таким образом, необходимо будет быть уверены, что одна из тех проверок (11:29 или 11:31) все еще берет хит 11:30, и что ТОЛЬКО один из них делает (т.е. Вы не работаете и в 11:29 и в 11:31).
Преимущество, которое этот подход имеет по проверке только на временах, которые Вы знаете, чтобы быть в Вашем списке, это позволяет Вашему списку быть измененным третьими сторонами без Вашего ведома, и Ваш обработчик событий продолжится к 'просто работе'.
Самый простой путь состоял бы в том, чтобы, вероятно, использовать планировщик Windows.
Иначе необходимо использовать один из классов Таймера, вычисляя сколько времени до первого события. Этот подход, в отличие от планировщика, позволяет новым событиям быть найденными рабочим процессом (и, возможно, сбрасывая таймер).
Проблема с № 1 состоит в том, что количество миллисекунд перед событием может быть слишком большим для хранения в интервале Таймера, и когда количество событий увеличивается, количество таймеров могло стать громоздким.
Я не вижу ничто плохого с № 2, но я выбрал бы второстепенного рабочего или поток.