2012-06-19 2 views
0

У меня есть класс таймера. Этот таймер будет запущен из разных частей моих кодовых блоков. У меня есть еще один класс для управления этим таймером, а именно CTimerManager ... Это статический класс. Так что проблема, с которой я сталкиваюсь здесь, - это когда я де инициализирую мое приложение, все мои запросы таймера будут уничтожены ... Но так как я запустил много таймеров, когда первый таймер отключается, память идет NULL, и если какие-либо другие таймеры активны и пытается получить доступ к исключению памяти (из-за синглетного экземпляра CTimerManager). Любой человек имеет представление о том, как решить эту проблему.Проблема синхронизации таймера в CPP?

+0

Я прочитал ваш вопрос 3 раза, и я все еще смущен: что вы спрашиваете? Название говорит о синхронизации, но вопрос в том, чтобы очистить. Я не могу понять, «когда первый таймер выключается, память идет NULL, и если какие-либо другие таймеры активны и пытается получить доступ к исключению памяти». Является ли это состоянием гонки первого таймера, который уходит во время очистки или он просто уходит, потому что он очищается? Что это за «это», которое пытается получить доступ к памяти? – stefaanv

+0

Чтобы перефразировать stefaanv: w'ah? – PlasmaHH

+0

К сожалению ... извините, что это беспорядок ... Логика здесь проста. Когда первый таймер уничтожается, все мои другие таймеры, которые активны, также должны быть уничтожены. Чтобы достичь этого, я должен называть StopTimer каждого таймер, который я создал ?? – Techy

ответ

0

Создайте экземпляры таймера только с помощью фабричного метода CTimerManager. Эти таймеры неотъемлемо связаны с вашим менеджером и принадлежат ему, и поэтому только менеджер должен взять на себя ответственность за их создание и удаление.

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

0

Из вашего описания вы создаете класс, в котором хранятся таймеры, которые возвращаются в себя через определенное количество времени. Когда вы уничтожаете менеджера, структуры данных таймера уходят, а затем таймеры возвращают объекты уничтожаются.

Вы должны отключить все свои таймеры при вызове деструктора для CTimerManager.

Вы используете потоки, а затем вызываете сон? В этом случае каждый таймер должен периодически проверять флаг, чтобы узнать, заканчивается ли таймер раньше. Затем в деструкторе вы устанавливаете флаг, чтобы завершить таймер раньше и соединить() все ваши потоки таймера.

Если вы вызываете обратный вызов таймера операционной системы, у него, вероятно, есть функция отменить таймер.

 Смежные вопросы

  • Нет связанных вопросов^_^