ACE学习笔记(三)

4 篇文章 0 订阅

一边看《C++网络编程卷2》的ACE_Task一边做点笔记。

书上提到了个Active Object模式。ACE_Task启动了一组线程,它们共用一个线程函数,而在这个线程函数里,调用了ACE_Task::svc().代码很容易理解。网上找了个Active Object的定义:

1、构造一个命令(实现Command模式的一个命令)ACE中就是一个ACE_Message_Block

2、将该命令放入Active Object Engine(也就是一个队列) ,也就是ACE_Message_Queue

3、从Engine取出一个命令,执行若该名林更没有执行过,设为执行过,将自己放入队列尾部,若执行过,判断该命令执行需要的时间发生没有,未发生,再将自己加入队列尾部。事件发生了,将需要执行的命令加入队列尾部。

最后一点在ACE中不是,队列中的消息如何处理完全由ACE_Task::svc(),也就是我们自己处理。

另外书上P157的UML图中有个错误,ACE_Task和ACE_Thrad_Manager包含关系方向错了,

小四边形应该在ACE_Task这边,

以By Reference(这里是指针)方式包含0..1个ACE_Thrad_Manager.


使用方法也较为容易,我们自己重写ACE_Task::svc(),一般就是一个循环,

不停的取getq(),这个getq已经是互斥方法了,

然后将取得的ACE_Message_Block转化为当初存进去的类型,既然是Command模式

,存进去的应该是一个类(当然不是也没关系)。

再做处理即可。至于队列中的对象从哪里来,

书上自带的例子是一个从ACE_Event_Handler继承的子类,

在其handle_input中putq的,我们也可以在任意需要的地方加入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值