为啥 CORBA run() 依赖于挂钟?

Posted

技术标签:

【中文标题】为啥 CORBA run() 依赖于挂钟?【英文标题】:Why CORBA run() depends on wall clock?为什么 CORBA run() 依赖于挂钟? 【发布时间】:2015-04-12 18:31:39 【问题描述】:

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 系统时钟,orb 运行持续时间会有所不同! (它看起来在球体内部,这取决于挂钟时间。)

我尝试使用perform_work(),但它似乎无法正常工作。请建议我一个克服这个orb挂钟参考的好方法。我是 Corba 的新手,没有太多想法。

【问题讨论】:

是什么让您认为它有所不同?它的差异有多大? 【参考方案1】:

默认情况下,TAO 确实使用系统时间来运行 ORB。要启用单调时间支持,您必须将以下行添加到 ace/config.h 文件的顶部并重新编译 ACE/TAO 和您的应用程序。

#define TAO_USE_HR_TIME_POLICY_STRATEGY
#define ACE_HAS_CLOCK_GETTIME_MONOTONIC

【讨论】:

【参考方案2】:

您不需要使用 orb 运行持续时间。 您可以启动一个调用 orb->run() 的新线程,当您想停止它时,只需从主线程调用 orb->shutdown()。

【讨论】:

以上是关于为啥 CORBA run() 依赖于挂钟?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 VisualVM 中 CPU 时间大于挂钟时间?

Corba 与 Android Studio [关闭]

为啥 Makefile 目标依赖于两个目标,但只运行一次?

为啥 VS Code javascript intellisense 依赖于我打开的文件?

为啥覆盖 Parallel.foreach 循环的 .NET 单元测试依赖于硬件?

为啥maven的pom.xml中插件本身没有声明flyway的数据库驱动依赖?