[openrtm-users 01154] Re: Clean-up of OpenRTM application

kurihara shinji shinji.kurihara @ aist.go.jp
2010年 3月 10日 (水) 14:14:21 JST


Hello,

Please try to apply the patch attached to the mailing list "[openrtm-users 01149]".
 or 
Please check out the source of the latest version from the following repositories.

 http://openrtp.jp/openrtm/svn/OpenRTM-aist/branches/RELENG_1_0/OpenRTM-aist


Regards, 
Shinji Kurihara

On Mon, 08 Mar 2010 18:04:32 +0100
Steffen Wittmeier <steffen.wittmeier @ in.tum.de> wrote:

> Hi,
> 
> I am building a robot simulator application based on OpenRTM components 
> (so that the simulator can smoothly be integrated with the real robot 
> which also uses RTCs).
> 
> The simulator GUI is using Qt and the main window as well as the 
> individual widgets are derived from QMainWindow and QWidget, 
> respectively, as well as from RTC::DataFlowComponentBase. Hence, every 
> widget is a RTC and a GUI widget at the same time.
> 
> This approach works quite well and I can even delete individual 
> widgets/RTC at run-time by catching the widget close event and calling 
> exit() on the component.
> 
> However, I am having troubles with cleaning-up the application on 
> closing. I am always getting the following error:
> 
> terminate called after throwing an instance of 'omni_thread_fatal'
> Aborted
> 
> What would be the right way of destructing the RTCs? I already updated 
> to OpenRTM 1.0 as the destructors were not called when I used OpenRTM 0.42.
> 
> Any help is appreciated...
> 
> 
> Here's a snapshot of the code that I am using:
> int
> main(int argc, char** argv)
> {
>    RTC::Manager* manager;
>    manager = RTC::Manager::init(argc, argv);
> 
>    // Initialize manager
>    manager->init(argc, argv);
> 
>    // Set module initialization procedure
>    // that's where I create the basic components of the GUI
>    // (MainWindow, Model, Controller, LogManager)
>    manager->setModuleInitProc(createComponents);
> 
>    // Activate manager and register to naming service
>    manager->activateManager();
> 
>    // run the manager in non-blocking mode
>    manager->runManager(true);
> 
>    // Qt main loop
>    application.exec();
> 
>   // when the main loop exits, clean up components
>   // compMainWindow, compEcceosController, etc. are handles
>   // to the component, they are of type RTC::RtcBase*
>    if (compMainWindow != 0)
>    {
>      std::cout << "Exiting main window" << std::endl;
>      compMainWindow->exit();
>    }
> 
>    if (compEcceosController != 0)
>    {
>      std::cout << "Exiting controller" << std::endl;
>      compEcceosController->exit();
>    }
> 
>    if (compEcceosModel != 0)
>    {
>      std::cout << "Exiting model" << std::endl;
>      compEcceosModel->exit();
>    }
> 
>    if (compLogManager != 0)
>    {
>      std::cout << "Exiting log manager" << std::endl;
>      //compLogManager->exit();
>    }
> 
>    manager->terminate();
> 
>    return 0;
> }
> 


-- 
----------
栗原 眞二 <shinji.kurihara @ aist.go.jp>

独立行政法人産業技術総合研究所
  知能システム研究部門 統合知能研究グループ
  〒305-8568
  茨城県つくば市梅園1-1-1 中央第2

  TEL: 029-861-5956



openrtm-users メーリングリストの案内