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