ACE主动对象模式学习

基于ACE的线程池学习与实现(一)——ACE_Task 这个主要是参考ACE官方文档写的 一、概述 ACE_Task 是ACE 中的任务或主动对象“处理结构”的基类。在ACE 中使用了此类来实现主动对象模式。所有希望成为“主动对象”的对象都必须从此类派生。你也可以把ACE_Task看作是更高级的、更为面向对象的线程类。 ACE_Task处理的是对象,因而在构造OO程序时更便于思考。因此,在大多数情况下,当你需要构建多线程程序时,较好的选择是使用A 阅读详情
利用ACE实现主动对象模式,主动对象派生于ACE_Task,在任务线程内执行异步方法,每个异步方法需封装成派生自ACE_Method_Object的类,而ACE_Activation_Queue作为异步方法类对象的队列,ACE_Future对象用来指定异步对象操作的结果.下面继续练练自己的笨手了:
//异步处理的方法封装.需从ACE_Method_Object派生,并实现call方法
class  CAsyncCount : public  ACE_Method_Object
{
private:
    
int  m_nMax;
    ACE_Future
<int>  m_futureRet;
public: 
    CAsyncCount( 
int nMax, ACE_Future<int> futureRet ) 
    {
        m_nMax         
=  nMax;
        m_futureRet   
=  futureRet;
    }

    
virtual int call ( ) 
    {
        ACE_Time_Value tmWait( 
0, 10000 );
        
int  nSum = 0;
        
for ( int nIndex = 1; nIndex <= m_nMax; nSum += nIndex,nIndex++ )
        {
            
//每次执行等待10ms
            ACE_OS::sleep( tmWait );
        }
        
//将结果设置到ACE_Future对象
        this->m_futureRet.set( nSum );

        
return -1;
    }
};


//主动对象
class  CTaskDemo : public ACE_Task<ACE_MT_SYNCH>
{
private:
    
//保存异步任务队列
    ACE_Activation_Queue  m_activeQueue;

public:
    
virtual int open (void *args = 0)
    {
        
//创建一个线程
        this->activate( THR_NEW_LWP, 1 );
        
return 0;
    }
    
virtual int close (u_long flags = 0)
    {
        
if ( ACE_OS::thr_equal ( ACE_Thread::self (),    this->last_thread () ) )
        {
            
//释放对象
            delete this;
        }

        
return 0;
    }
    
virtual int svc (void)
    {
        
while ( true )
        {
            
//用智能指针方便自动释放指针对象
            CAutoPtr<ACE_Method_Object>  spMethodObj( m_activeQueue.dequeue() );

            
//约定的退出机制,若call返回-1则推出
            if( -1 == spMethodObj->call() )
                
break;
        }

        
return 0;
    }

public:
    ACE_Future
<int>  AsyncCount( int nMax )
    {
        ACE_Future
<int>  futureRet;
        
//添加异步任务到队列
        this->m_activeQueue.enqueue( new CAsyncCount( nMax, futureRet ) );
        
return futureRet;
    }
};
调用示例:
        CTaskDemo  *pTask = new CTaskDemo;
        pTask
->open( );

        
//调用异步方法
        ACE_Future<int>  futureRet = pTask->AsyncCount( 100 );

        
do 
        {
            AtlTrace( _T(
"No Complete Yet\n") );
        } 
while( !futureRet.ready() );  //等待异步方法执行完
        
        
int nSum( 0 );
        futureRet.
get( nSum );  //获取执行结果
        AtlTrace( _T("The Result is %d\n"), nSum );

        ACE_Thread_Manager::instance()
->wait();

ThingsBoard PE专业版解决方案技术文档——温度&湿度 温湿度解决方案 阅读详情

相关推荐

暗月项目七详解

本文围绕“暗月靶场项目七”展开,记录了一次从外网 Web 入口逐步深入内网并最终获取域控目标的完整实训过程。

Re_K123的博客 417

ACE中的主动对象模式(Active Object Pattern)

被动对象就是一般情况下在那儿放着不会动,等待着别的执行线程调用,然后才会执行。主动对象一般自己包含执行线程,可以主动的执行代码。 1.主动对象是基于ACE_Task类的,它提供执行线程的。 2.当某些要执行的代码想被执行时,要放入某个队列,然后执行线程发现队列不空时就从这个队列里面取出这个队列中的对象,然后执行。这个队列就是ACE_Activation_Queue。 3.放

ciahi的专栏 3384

ai数字人系统部署

这段代码实现了基本的语音交互闭环,用户通过语音输入问题,数字人识别语音后进行自然语言理解并生成回复,再将回复转换为语音输出。但实际应用中的 AI 数字人系统更为复杂,如形象渲染需专业图形引擎(如 Unity、Unreal Engine),自然语言处理也会涉及更复杂的模型微调及多轮对话管理等。一个完整的 AI 数字人系统涵盖形象生成、自然语言处理、动作控制等多个复杂功能,下面为你提供一个 Python 示例,整合多个库来实现数字人基础功能,包括语音交互、简单的自然语言理解以及通过虚拟形象展示对话。

weixin_ggwwsscc的博客 369

主动对象(Active Object):用于并发编程的对象行为模式

第6章 主动对象(Active Object):用于并发编程的对象行为模式 R. Greg LavenderDouglas C. Schmidt 摘 要   本论文描述主动对象(Active Object)模式。该模式使方法执行与方法调用去耦合,以简化对驻留在它自己的线程控制中的对象的同步访问。主动对象模式允许一或多个交错访问数据的独立执行的线程被建模为单个对象。这一并发模式能良好地适

vasal的专栏 1258

保姆级教程:在LKD3588开发板上为RK3588添加SC2210摄像头驱动(含完整DTS配置)

本文提供了一份详细的教程,指导如何在LKD3588开发板上为RK3588处理器添加SC2210摄像头驱动,包括完整的DTS配置和内核编译步骤。教程涵盖了环境准备、驱动文件添加、DTS配置详解、内核编译与烧录、驱动测试以及常见问题排查,帮助开发者快速实现SC2210传感器在RK3588平台上的集成与优化。

weixin_42641741的博客 480

稚晖君Dummy机械臂CAN总线控制详解:从代码到实战(附常见问题排查)

本文深入解析了稚晖君Dummy机械臂的CAN总线控制技术,从协议设计到代码实现,详细介绍了CAN总线在机械臂控制中的核心价值、通信协议栈设计、运动控制指令实现及常见问题排查方法。通过实战案例和代码示例,帮助开发者快速掌握机械臂CAN总线控制的关键技术。

uuu88的博客 295

ACE-Task主动对象

ACE中有一个独特的对象叫做主动对象,在ACE的官方文档中描述为:ACE_Task是ACE中的任务或主动对象处理结构的基类,在ACE中使用此结构来实现主动对象模式,所有希望成为主动对象的对象都必须从此类派生。 主动对象可以理解为在类的内部实现了线程,我们需要做的就是为线程创建相应的环境,实现线程的操作,然后开启线程。 要创建主动对象必须继承ACE_Task类,并实现下列方法: 1、初始化和终

zhoutong12589的专栏 660

AI绘画与医疗可视化:用AI生成医学插图的实践

医疗可视化是医学教育、临床沟通和学术研究的核心工具。传统医学插图依赖手工绘制或专业3D建模,存在制作周期长、成本高、更新迭代慢等问题。随着深度学习技术的发展,AI绘画工具(如Stable Diffusion、DALL-E)展现出强大的图像生成能力,但医疗领域对插图的解剖准确性、标注规范性和语义完整性有极高要求,通用AI模型难以直接应用。本文聚焦AI技术与医疗领域的交叉创新,系统阐述如何通过数据预处理、模型定制化训练和后处理校验,构建符合医疗标准的插图生成系统。

大模型应用工坊 1788

任务和主动对象(Active Object):并发编程模式

这一章介绍前面提到过的ACE_Task类,另外还介绍了主动对象模式。基本上这一章将涵盖两个主题。首先,它将讲述怎样将ACE_Task构造作为高级面向对象机制使用,用以编写多线程程序。其次,它将讨论怎样在主动对象模式[II]中使用ACE_Task。    那么到底什么是主动对象呢?传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的。也就是,调用

zhenjiangge的专栏 1439

YOLOv8改进 | 注意力机制 | 添加HAttention(HAT)超分辨率重建助力小目标检测 (全网首发,超分辨率检测)

本文给大家带来的改进机制是HAttention注意力机制,混合注意力变换器(HAT)的设计理念是通过融合通道注意力和自注意力机制来提升单图像超分辨率重建的性能。通道注意力关注于识别哪些通道更重要,而自注意力则关注于图像内部各个位置之间的关系。HAT利用这两种注意力机制,有效地整合了全局的像素信息,从而提供更为精确的结果(这个注意力机制挺复杂的光代码就700+行),但是效果挺好的也是10月份最新的成果非常适合添加到大家自己的论文中。⭐⭐⭐⭐⭐(最新的改进机制)

Snu77的博客 1万+

在 Eclipse 里快速用上 SAP Joule:ABAP 开发者的 AI 助手上手指南

本文介绍了SAP Joule for developers如何集成在ABAP开发工具中,为开发者提供AI辅助能力。主要内容包括: Joule作为ADT的增强层,直接嵌入开发流程,支持在项目资源管理器、代码编辑器等场景下通过上下文菜单调用AI功能。 核心使用方式:打开Joule视图后,可在开发对象、代码片段等上下文中使用自然语言交互,请求解释、生成测试或获取示例代码。 重点功能: Explain:解释现有代码逻辑,降低理解成本 ABAP Unit测试生成:快速创建与上下文相关的测试用例 支持在传输管理器等完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 394

ACE_TASK学习--主动对象模式二

转载自: ACE主动对象模式(2) - 天方 - 博客园 http://www.cnblogs.com/TianFang/archive/2006/12/12/590153.html ACE主动对象模式(2) 在上篇文章里,我们简单的介绍了一下ACE主动对象实现方式,同时提出了两个问题: 方法调用线程如何知道该方法已经执行完成?  如何或得方法的返回值...

weixin_30521649的博客 326

DB文件在编程中的作用及示例代码

通过使用DB文件,我们可以实现数据的持久化存储,并能够高效地进行数据的增删改查操作。在本文中,我们以SQLite数据库为例,演示了如何使用Python语言创建和操作DB文件的示例代码。在实际的编程中,我们可以根据具体的需求和使用的数据库系统来进行更复杂的操作和优化。通过使用DB文件,我们可以实现数据的持久化存储,确保数据在程序关闭后也能被保留,并且能够高效地进行数据检索和更新。在本文中,我们将探讨DB文件的作用,并提供一些示例代码展示如何在编程中使用DB文件。上述代码中,我们使用SQLite提供的。

CodeSpark的博客 1821

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ACE 主动对象模式的按部就班的实现方法

ACE的主动对象模式的实现 对分布式系统设计来说,ACE提供的主动对象模式是让我们在系统框架构建的时候,回归到传统的单线程编程思维。你可能要问,既然有主动对象,那必然有被动对象,没有错,确实有被动对象,那到底什么是主动对象?什么又是被动对象呢? 被动对象: 假如我们要给一个客户端提供一个方法,计算两个数之和。我们一般定义一个对象,然后实现具体的加法运算操作,客户端在调用的时候,首先实例化我们

点点滴滴 1356

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java主动对象模式_ACE主动对象模式

ACE主动对象模式ACE主动对象模式解决的核心问题是,异步调用及线程context的切换。ACE主动对象的实现侧重于类代码段的并发访问,这种访问模式仅适合短小的处理流程,比如socket的accept请求,或者webservice调用。如果代码段处理响应速度大于请求到达速度,异步访问队列将很快被访问请求填充满,带来后续请求无法及时响应的问题。ACE主动对象模式实现至少涉及3个类模块:1:提供多线程...

weixin_35578119的博客 262

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ACE主动对象模式

3:提供了ACE_Activation_Queue队列操作实例的ACE_Method_Request,ACE_Method_Request是command模式,最低消耗仅为实现其内部的call方法。2:提供请求排队的ACE_Activation_Queue,其内部维护了ACE_Message_Queue的message_block消息指针队列。1:提供多线程池ACE_Task_Base或者ACE_Task或者ACE_Thread_Manager.//生成命令对象,插入到命令队列中。//分发对象构造函数。

EveryDayOneHour的博客 303

java主动对象模式的作用,主动对象模式-GilBert1987-ChinaUnix博客

参考:《ACE自适配通信环境中文技术文档》1.主动对象模式介绍主动对象模式用于降低方法执行和方法调用之间的耦合。该模式描述了另外一种更为透明的任务间通信方法。该模式使用ACE_Task类作为主动对象。在这个对象上调用方法时,它就像是常规对象一样。就是说,方法调用是通过同样的->操作符来完成的,其不同在于这些方法的执行发生于封装在ACE_Task中的线程内。2.主动对象模式工作原理2.1主动对...

weixin_33070823的博客 240

java主动对象模式_ACE主动对象模式(1)

主动对象模式用于降低方法执行和方法调用之间的耦合。该模式描述了另外一种更为透明的任务间通信方法。传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的,当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象却不一样。这些对象具有自己的命令执行线程,主动对象的方法将在自己的执行线程中执行,不会阻塞调用方法。例如,设想对象"A"已在你的程序的main()函数中被实例化。当...

weixin_42310231的博客 287

主动对象模式

主动对象模式用于降低方法执行和方法调用之间的耦合。该模式描述了另外一种更为透明的任务间通信方法。传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的,当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象却不一样。这些对象具有自己的命令执行线程,主

433

ACE主动对象模式(2)

转载于:http://www.cnblogs.com/TianFang/archive/2006/12/12/590153.html 我们简单的介绍了一下ACE主动对象实现方式,同时提出了两个问题: 方法调用线程如何知道该方法已经执行完成?  如何或得方法的返回值? 要解决这两个问题,首先得介绍一下ACE_Future对象,ACE_Future是表示一个会在将来被赋值的"...

ai1053154867的博客 117

ACE-ACE主动对象模式

ACE主动对象模式(1) 主动对象模式用于降低方法执行和方法调用之间的耦合。该模式描述了另外一种更为透明的任务间通信方法。 传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的,当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象却不一样。这些对象具有自己的命令执行线程,主动对象的方法将在自己的执行线程中执行,不会阻塞调用方法。 例如,设想对象"A"

ljmwork的专栏 566
上一篇: 使用 ACE 库框架在 UNIX 中开发高性能并发应用
下一篇: ACE中的设计模式应用场景
mopname
博客等级 码龄15年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值