Мне было интересно, как лучше написать приложение. По сути, у меня есть проект спортивного симулятора, который является многопоточным и может одновременно выполнять различные симуляции игры.
Я храню свои совпадения в базе данных SQLite, к которой прикреплен DateTime.
Я хочу написать приложение, которое проверяет каждый час или около того, чтобы увидеть, нужно ли играть какие-либо новые матчи и порождает эти темы.
Я не могу рассчитывать на то, что планировщик задач будет выполнять это каждый час, потому что есть объекты, которые будут совместно использоваться различными экземплярами этого процесса (в частности, объект турнира), которые, как я подозреваю, будут перезаписаны новым процессом при сохранении в БД. Поэтому в идеале мне нужно написать какой-нибудь длительный процесс, который спит между часами.
Я написал свою объектную модель так, чтобы каждый объект загружался из памяти только один раз, поэтому, пока все потоки моделирования порождаются из этого одного приложения, они не должны перезаписывать данные.
РЕДАКТИРОВАТЬ: Подробнее о требованиях
По сути, несколько матчей должны иметь возможность запускаться одновременно. Эти совпадения могут иметь произвольную длину, поэтому необязательно, чтобы одно заканчивалось до начала другого (фактически, в большинстве случаев одновременно выполняется несколько совпадений).
Я предполагаю, что это программа, которая работает в фоновом режиме (сервис, я полагаю?), Который спит в течение 60 минут, а затем проверяет базу данных, чтобы увидеть, следует ли запускать какие-либо игры. Если есть что-то, что нужно запустить, он запускает потоки для имитации этих игр, а затем возвращается в режим сна. Следовательно, потоки моделирования работают, но поток «планирования» спит еще 60 минут.
Причина, по которой я не могу (я думаю) использовать интерфейс планирования задач ОС по умолчанию, заключается в том, что для этого требуется, чтобы задача, которую нужно выполнить, была отвергнута как новый процесс. Я разработал мою объектную модель базы данных так, чтобы они кэшировались каждым классом объектов при первой загрузке (ссылка на память), что означает, что каждый объект загружается из памяти только один раз, и эта ссылка используется во всех сохранениях. Это означает, что когда каждый поток моделирования завершается и сохраняет свое состояние, для сохранения состояния используется одна и та же ссылка (с обновленным состоянием). Если каждый раз запускается другой исполняемый файл, предположительно, каждый процесс открывает разные ссылки на память, и, следовательно, один процесс может сохранить в БД и перезаписать состояние, записанное другим процессом.
Служба выглядит как путь. Есть ли способ заставить службу просто спать 60 минут, а потом проснуться и выполнить функцию? Я чувствую, что создание этого стандартного консольного приложения приведет к потере памяти, но я не знаю, есть ли эффективный способ сделать это, о котором я не знаю.