天天好味道

没钱没权没户口,靠走靠吼靠小狗
随笔 - 66, 文章 - 1, 评论 - 504, 引用 - 5

导航

<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

留言簿(11)

随笔分类

随笔档案

文章档案

我的链接

搜索

最新评论

阅读排行榜

评论排行榜

郁闷的ACE for WinCE

两个都包含CE,可惜工作的不怎么样。
我今天很沮丧,最初项目启动的时候,需求上要求可以在WinCE,Windows & Linux上跑,
Java当然不在我的考虑之内,因为以前看过ACE,而且知道他有一个非常不错的ACE_OS
封装,可以在很多平台上进行源码级别的移植,所以就决定使用ACE作为开发的基础。
一切进展都还算顺利,For CE的静态库编译出来了,ACE_OS的很多C 库函数用得也不错,
但是,今天发现ACE里最最重要的东西之一:Reactor在winCE上是不能工作的。原因是
WinCE的WaitForMutliObjects这个函数支持有限,而这个Bug在04年就被发现了!但是
从ACE的任何文档中都没有发现提到这个限制的文字。如此重要的feature missing,竟然
一字不提,光知道吹嘘如何的跨多少个平台...幸好这个问题还算可以弥补,因为项目
其实并不是一个网络服务器性质的。但是还是非常的郁闷。
说起来,ACE是一个完全免费而且自由的软件,我没有资格苛求它像商业产品一样的完善,
只不过通过这个事情,让我明白,如果要用非商业软件,就要做好阅读/Hack他的代码的
准备,更不能一厢情愿的相信这些问题别人会比你先碰到,并且已经解决...

posted on 2006-03-31 18:40 jzhang 阅读(2944) 评论(15)  编辑 收藏

评论

# re: 郁闷的ACE for WinCE

呵扑通~是不懂!!!
2006-03-31 19:18 | 安静的玫瑰

# re: 郁闷的ACE for WinCE

ACE,可适配网络通讯环境。是一个C++的框架。
2006-04-03 08:56 | jzhang

# re: 郁闷的ACE for WinCE

是 WFMO_Reactor 不能正常工作
ACE_TP_Reactor 和 ACE_Select_Reactor 应该还可以工作吧
既然要跨平台,用 ACE_TP_Reactor 估计会好些,毕竟 WFMO 是平台相关的。
2006-04-03 11:24 | imjj

# imjj,你是不是对ACE很精通?

太好了,呵呵。其实我是使用它的ASNMP,里面用到了这个Reactor,我还没有搞清楚他这个几个Reactor之间的区别...能否讲讲?
2006-04-03 11:33 | jzhang

# re: 郁闷的ACE for WinCE

精通可是谈不上,比如 ASNMP 偶就不懂
不过这几个 Reactor,都是通常网络编程模型的抽象,
基于 select 的,叫 ACE_Select_Reactor,基于每个请求一个线程的,叫ACE_TP_Reactor,在Windows下,ACE_WFMO_Reactor 是基于WaitForMulitObjects的,这些,在《Windows网络编程》里都有介绍。

ACE_Reactor只是为这些编程模型做的封装,而相应的 ACE_XXX_Reactor 是 ACE_Reactor::implement_成员,ACE_Reactor 通过这样的机制来提供功能。

所以,要使用其他模式的 Reactor,就是要更改implement_成员,
这个可以这样
int change_reactor_mode()
{
  ACE_Reactor_Impl * impl;
   ACE_NEN_RETURN(impl,  ACE_TP_Reactor; -1);
  ACE_Reactor * reactor;
  ACE_NEW_RETURN(reactor,  ACE_Reactor(impl, 1), -1);
  ACE_Reactor::instance(reactor, 1);
  return 0;
}

这个一定要放在程序最开始,也就是 ACE_Reactor::reactor_ == NULL 之前调用
2006-04-03 12:03 | imjj

# re: 郁闷的ACE for WinCE

snmp 可以用其他的开发包吧。
2006-04-03 12:57 | sevencat

# 谢谢 imjj

明白了,我可以用select的。
2006-04-03 15:09 | jzhang

# asnmp是ace自带的,封装的不错

所以我们的工程师就不想再使用其它的库了
2006-04-03 15:10 | jzhang

# xmjj

我换用select_reactor,结果crash.
我设置了ACE_USE_SELECT_REACTOR_FOR_REACTOR_IMPL
宏,重新编译ACE的静态库。然后我写了一个测试程序来测试:
ACE_Reactor* reactor = ACE_Reactor::instance();
在new 这个Reactore implement的时候,有一个dynamic_cast,把Reactor_impl转换为Select_Reactor_impl的时候发生内存访问违例,就crash了。请问你知道怎么回事吗?
2006-04-04 13:50 | jzhang

# re: 郁闷的ACE for WinCE

snmp++和netsnmp都还可以,
2006-04-06 22:20 | sevencat

# to sevencat

主要是不想引入新的未知因素,也不想去移植了.呵呵.
有现成的for CE的版本吗?
2006-04-06 22:34 | jzhang

# re: 郁闷的ACE for WinCE

不知道,因为asnmp这个东东好像并没有被大量广泛的使用,所以我个人意见不要用这种东东。(他里面的xml库也是这样),而且ace本身就极难调试,出了问题会死人的。
2006-04-07 08:39 | sevencat

# to sevencat

恩,我先看看asnmp是不是好用,不行再换
2006-04-07 10:24 | jzhang

# re: 郁闷的ACE for WinCE

netsnmp很不错 很多年前用过 除了烦琐 没别的
snmp协议本来就烦琐.......  netsnmp有一个python
的wrapper 你可以先拿来试试 :-)
2006-04-09 15:53 | TripleX

# Comment 19140 的解决

刚好有人问起,我查了查当时的解决办法,发现我换用
ACE_USE_TP_REACTOR_FOR_REACTOR_IMPL
了。
2007-05-09 08:57 | jzhang
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]