当前位置:   article > 正文

使用OmniORB出现的一些问题及已实现的解决方法_omniorb4/omniinternal.h:41:24: 致命错误:omnithread.h:没

omniorb4/omniinternal.h:41:24: 致命错误:omnithread.h:没有那个文件或目录

我是从自己的实际经历中得出的。也许应用到别的环境里未必可行。

 

现介绍下当时的实验环境:omniORB4.1.2+VS2005+Mysql5.0,语言是c++,MFC界面。

 

问题1.编译后显示——fatal error C1189: #error :  "The byte order of this platform is unknown"

解决方法:我的是宏设置的格式出了问题。后按照下面格式设置后,就解决了。具体原因没深究。

__WIN32__

__x86__

_WIN32_WINNT=0x0400

__NT__

__OSVERSION__=4

 

问题2.如何在MFC中初始化ORB,参数如何传入?

解决方法:按照如下格式即可。当然参数不止这些,但这些是基本的,必须使用。

int argc=4;                                          

char** argv=new char*[4];                            
argv[0]="-ORBid";                                    
argv[1] = "omniORB4";                                
argv[2] = "-ORBInitRef";                             
argv[3] = "NameService=corbaname::IP:PORT";

 

问题3.运行界面时开启服务器,理论上应该可以搁在一边不管。但是事实上server没有监听端口。

解决方法:OmniORB中服务端的操作默认都是委托给main Thread。原文如下:

   POAs with the MAIN_THREAD policy dispatch calls on the ‘main’ thread. By default, omniORB assumes that the thread that initialised the omnithread library is
the ‘main’ thread.

所以,有两种解决途径:

一、程序中使用多线程。将初始化server的线程让给server,新增线程执行界面操作。我是使用OPENMP中的section机制即任务分解实现的。


二、在开启server前,声明server使用非主线程。在OmniORB中是有此类函数的。事实上omniORB在设置环境时就设为支持多线程了。

namespace omniORB {
void setMainThread();
};

第二种办法由于没有实际使用,所以也无法具体介绍。

以上是我的一些小见解。欢迎补充~~~

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/496933
推荐阅读
相关标签
  

闽ICP备14008679号