ACE实践笔记(一)

来源:互联网 发布:雪碧图动画 java 编辑:程序博客网 时间:2024/05/17 10:06

最近使用ACE完成了一个视频转发服务器,这算是用ACE完成的第一个完整的程序,总结总结经验。

这个程序主要功能就是接收客户指令,连接指定设备,获取视频流,然后再传输给客户。

最初的想法是能够尽量多的负载视频路数,同时尽可能迅速的给客户响应。

这里使用了异步的Proactor框架,这个Proactor线程里面,负责接收连接,以及收到命令后做验证后,加入Task队列。

命令处理部分使用了Task框架。为了避免加入Task框架时的数据拷贝,使用了内存池,接收的内存即是处理的内存。

程序逻辑部分大量使用了Observer,Proxy,Chain Responsibility,sigleton,Adapter 等模式以及boost的一些内容。

仅说说使用ACE的经验。

(1)ACE_DEBUG

我想让这个宏在Debug模式下打印LM_DEBUG信息,而在Release下仅仅打印LM_ERROR信息。

在程序启动的时候调用ACE_Log_Msg::instance()的enable_xxx/disable_xxx函数不起作用,原因不明

只能手动设置其打印参数,函数名现在忘记了。

(2) Proactor

书上的例子中,一个连接对应一个ACE_Message_Block,应该是不够的。一个命令未处理完时,

下个命令到达,就会破坏原来的数据。除了内存池,尚未想到更好的办法。每次命令到达时,手动new,

命令结束时delete,显然是不可行的。

这里还有个问题,就是当我结束服务时,那么应该将每个连接对用的异步读/写cancel掉,

那么此时未处理的ACE_Message_Block,就没有时机去释放了。可能造成内存泄露。

(3)Task

Task相对容易使用

(4)容器

ACE容器接口与STL有差别,与STL相比有其优势,就是返回值明确。但是也造成如果更换容器时,则要麻烦一点。

现在使用的办法是做了一层Adapter,将STL容器都做成了ACE_Style的容器,返回0或-1。尚未想到其他办法。

(5)同步

现在使用的同步为ACE_Thread_Mutex在Windows下则为CRITICAL_SECTION,有些地方其实我想使用SRW读写锁,

暂时也没有去动手做。


暂时先想到这么多。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕初期喝醉了怎么办 怀孕前喝酒了怎么办 受孕期间喝酒了怎么办 一个月发现怀孕怎么办 上课不专心老师怎么办 小孩子上课不专心怎么办 孩子好动不专心怎么办 一年级上课不听讲怎么办 小孩不专心听讲怎么办 小孩上课不集中怎么办 一年级上课不专心怎么办 上课不认真听课怎么办 高中上课不专注怎么办 上课听不进去怎么办 孩子上课容易走神怎么办 上跆拳道不听讲怎么办 孩子写字很慢怎么办 孩子写字慢该怎么办 小孩不遵守纪律怎么办 初一孩子上课走神怎么办 转学学籍转不了怎么办 孩子学习不专心怎么办 高中上课老走神怎么办 儿童演出前紧张怎么办 幼儿做事不认真怎么办 上课讲话的孩子怎么办 孩子不用心读书怎么办 小孩读书不专心怎么办 幼儿争抢玩老师怎么办 小孩做作业发呆怎么办 宝宝上课不认真怎么办 孩子不认真听课怎么办 小孩不认真听课怎么办 小孩叛逆家长该怎么办 小孩心里有问题怎么办 孩子做作业发火怎么办 小孩上课小叨咕怎么办 孩孑读书读不走怎么办 幼儿分离焦虑症怎么办 忍不住想打孩子怎么办 控制不住打骂孩子怎么办