so_4: Версия 4.2.6. Автоматическое уничтожение таймера диспетчером

В предыдущих версиях SObjectizer-а диспетчеры не контролировали время жизни объектов-таймеров. Об этом должен был заботиться программист:
int
main() {
  // Создаем нить таймера.
  std::auto_ptr< so_4::timer_thread::timer_thread_t >
    timer_ptr( so_4::timer_thread::simple::create_timer_thread() );

  // Создаем диспетчер.
  std::auto_ptr< so_4::rt::dispatcher_t >
    disp_ptr( so_4::disp::one_thread::create_disp( *timer_ptr ) );
    
  ...
  
  // Объект диспетчер и объект таймер будут уничтожены
  // автоматически при выходе из main().
}
Такой подход требовал от программиста использование дополнительного контроля за временем жизни объекта таймера. Например, в виде дополнительной переменной типа std::auto_ptr (auto_ptr_3::obj_ptr_t).

В версии 4.2.6 для создания диспетчера с одной рабочей нитью и с активными объектами реализованы дополнительные функции create_disp, которые получают два аргумента: указатель на объект таймер и флаг, определяющий, что должен делать диспетчер с таймером в своем деструкторе. Если этот флаг имеет значение so_4::auto_destroy_timer, то объект таймер автоматически уничтожается диспетчером.

Это позволяет переписать приведенный выше пример следующим образом:

int
main() {
  // Создаем диспетчер.
  std::auto_ptr< so_4::rt::dispatcher_t >
    disp_ptr( so_4::disp::one_thread::create_disp(
      // И таймер для диспетчера.
      so_4::timer_thread::simple::create_timer_thread(),
      // Таймер будет автоматически уничтожен.
      so_4::auto_destroy_timer ) );
    
  ...
  
  // Объект диспетчер и объект таймер будут уничтожены
  // автоматически при выходе из main().
}

Документация по SObjectizer. Последние изменения: Thu Jan 12 10:52:50 2006. Создано системой  doxygen 1.4.6-NO
Hosted by uCoz