ACE (C ++): не вызывать cancel_timer == MLK? - PullRequest
0 голосов
/ 02 апреля 2009

Если таймер однократного срабатывания был запланирован с помощью

schedule_timer(timer,0,ACE_Time_Value(delay),ACE_Time_Value::zero)

требуется ли метод cancel_timer во избежание утечки памяти?

Ответы [ 2 ]

1 голос
/ 02 апреля 2009

Я думаю, что ответ "это зависит". При использовании чего-либо, кроме относительных древних версий ACE, вы можете заставить Reactor (или Timer_Queue) увеличить счетчик ссылок в вашем обработчике событий и уменьшить его, когда обработчик событий будет удален из Reactor (или Timer_Queue.) Обратите внимание, что подсчет ссылок не является обязательным и должен быть включен.

Кроме того, я не использовал этот материал, прочитайте документацию и протестируйте!

0 голосов
/ 02 апреля 2009

Объект таймера не будет освобожден ACE, но любая структура данных, необходимая ACE для поддержания таймера, будет освобождена после его запуска.

Два способа проверить это:

  • Прочитайте исходный код ACE (не весело)
  • Запустите небольшую тестовую программу под valgrind
...