[ACE程序员教程笔记]将同步方法转换为异步方法

对于比较耗时的处理(如IO操作),如果采用同步的调用方式,程序则会阻塞在当前调用的函数上,无法进行其它的操作,造成时间浪费,ACE提供了方法对象(ACE_Method_Object),可以实现将同步方法转换为异步方法的机制,下文中将以打印服务为例介绍如何将同步方法转换为异步调用的方法。

此方案采用了多线程处理的方式,将原来的类方法作为一个方法对象(ACE_Method_Object),每一次函数的调用都会创建一个方法对象,之后会将此方法对象加入到活动队列(activation queue),活动对象(ACE_Task)的服务函数中从队列中取出方法对象,并执行函数调用。

 

下面为日志类,主要包含Say和SayImpl两个函数,一个函数是供用户程序使用,另一个是供方法对象使用。

在实现代码中可以看到,每一次的函数调用都会创建一个MO对象,并将其压入队列;SayImpl模拟IO耗时操作。

方法对象是对Say的对象化,实现打印字符串的操作。每一个方法对应一个方法类

方法对象类的关键为call方法的实现,通过此方法可以调用Logger对象相关的函数

测试程序代码,针对pLogger对象执行100此函数调用,从其输出日志可以看出:每一次的函数调用,SayMO对象会被调用一次,调用完成之后会自动调用销毁函数;主程序线程与调用函数分别位于不同的线程中。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值