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

В предыдущих версиях SObjectizer-а Run-Time не контролировал время жизни диспетчера. Об этом должен был заботиться программист:
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 добавлена функция so_4::api::start(), в которой можно указать, должен ли диспетчер уничтожаться перед возвратом из функции start(). Это позволяет переписать приведенный выше пример следующим образом (см. также so_4: Версия 4.2.6. Автоматическое уничтожение таймера диспетчером):

int
main() {
  // Объект диспетчер и объект таймер будут уничтожены
  // автоматически при выходе из start().
  so_4::ret_code_t rc = so_4::api::start(
    // Диспетчер будет уничтожен при выходе из start().
    so_4::disp::one_thread::create_disp(
      // Таймер будет уничтожен диспетчером.
      so_4::timer_thread::simple::create_timer_thread(),
      so_4::auto_destroy_timer ),
    so_4::auto_destroy_disp,
    &a_coop );
  if( rc )
  {
    ...
  } 
}

Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:48 2008. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo