Почему CORBA run() зависит от настенных часов?

CORBAorb->run() зависит от настенных часов. Как я могу изменить это поведение?

 CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
  const unsigned int orb_duration = 10000000; // 10 seconds    
    while(true)
    {
        ACE_Time_Value tv(0, orb_duration );
        tv.set(0, orb_duration );
        orb->run(tv);
      //orb->perform_work (tv);   
     //some task and back to orb;
    }

Здесь orb->run(tv) зависит от системного времени, если я меняю системные часы Linux, продолжительность работы шара меняется! (Он смотрит внутрь шара, это зависит от времени настенных часов.)

Я пытался использовать perform_work(), и похоже, что это не сработает. Пожалуйста, предложите мне хороший способ преодолеть эту ссылку на настенные часы orb. Я новичок в Corba, и у меня не так много идей.


person sree    schedule 12.04.2015    source источник
comment
С чего вы взяли, что он разный? И насколько он отличается?   -  person karmasponge    schedule 13.04.2015


Ответы (2)


По умолчанию TAO использует системное время для запуска ORB. Для включения поддержки монотонного времени вам необходимо добавить следующие строки в начало файла ace/config.h и перекомпилировать ACE/TAO и ваше приложение.

#define TAO_USE_HR_TIME_POLICY_STRATEGY
#define ACE_HAS_CLOCK_GETTIME_MONOTONIC
person Johnny Willemsen    schedule 13.04.2015

Вам не нужно использовать продолжительность бега шара. Вы можете запустить новый поток, в котором вы вызываете orb->run(), и когда вы хотите его остановить, просто вызовите orb->shutdown() из основного потока.

person BJovke    schedule 26.03.2016