`

ACE线程管理机制-面向对象的线程类ACE_Task

    博客分类:
  • ACE
阅读更多

我们在前一章中使用ACE_Thread包装时,你一定已经注意到了一些不够"优雅"的地方。那一章中的大多数程序都被分解为函数、而不是对象。这是因为ACE_Thread包装需要一个全局函数名、或是静态方法作为参数。随后该函数(静态方法)就被用作所派生的线程的"启动点"。这自然就使得程序员要为每个线程写一个函数。如我们已经看到的,这可能会导致非面向对象的程序分解。

ACE_Task对常用线程处理进行了OO包装,通过ACE_Task,能对线程进行更好的操作。

要创建任务,需要进行以下步骤:

  1. 实现服务初始化和终止方法:
    open()方法应该包含所有专属于任务的初始化代码。其中可能包括诸如连接控制块、锁和内存这样的资源。close()方法是相应的终止方法。
  2. 调用启用(Activation)方法:
    在主动对象实例化后,你必须通过调用activate()启用它。要在主动对象中创建的线程的数目,以及其他一些参数,被传递给activate()方法。activate()方法会使svc()方法成为所有它生成的线程的启动点。
  3. 实现服务专有的处理方法:
    如上面所提到的,在主动对象被启用后,各个新线程在svc()方法中启动。应用开发者必须在子类中定义此方法。

下面的例子演示怎样去创建任务:

#include "ace/Task.h"
#include "ace/OS.h" 

#include <iostream>
using namespace std;

class TaskThread: public ACE_Task<ACE_MT_SYNCH>
{
public:
    virtual int svc(void)
    {
        for(int i=0;i<10;i++)
        {
            ACE_OS::sleep(1);
            cout<<endl<<"hello thread1"<<endl;
        }
        return 0;
    }
};

int main(int argc, char *argv[]) 
{ 
    TaskThread task;
    task.activate();
    
    while(true)
        ACE_OS::sleep(10);

    return 0; 
}
 

ACE_Task也封装了常用线程操作,如暂停,恢复及停止等,是不是非常简单和方便呢。

其实ACE_Task的使用还不仅仅是这些,通过它还可实现一种很常用的网络编程模式--主动对象模式,其具体功能在后续的设计模式部分将作详细的介绍。

分享到:
评论

相关推荐

    analysis of ACE_Task-putq with timeout=0 when queue is full on Linux platform.pdf

    ### 分析ACE_Task::putq在队列满且timeout为0的情况 #### 0. 引言 在本文中,我们将深入探讨调用`ACE_Task::putq`函数时的各种行为,尤其是当队列满且`timeout`参数设为0的情况。我们将分析涉及的多个层面,包括...

    ACE_Thread.txt ACE_Thread.txt ACE_Thread.txt ACE_Thread.txt ACE_Thread.txt ACE_Thread.txt

    `ACE_Task`是ACE框架中用于实现多线程任务处理的一个重要类,它提供了线程启动、关闭、激活等功能,并且能够处理消息队列。 - **启动线程**:通过`activate()`方法启动线程。 - **关闭线程**:通过`close()`方法...

    ACE多级线程实例

    该类是所有ACE线程类的基础,继承自`ACE_Task_Base`类。一个典型的ACE线程实例包括以下步骤: 1. **定义一个派生自`ACE_Task_Base`的类**:例如`HA_CommandHandler`类。 2. **重写`svc()`方法**:该方法将在新线程...

    ACE并发编程示例及Task类的实现

    总结来说,ACE框架中的ACE_Task类是实现并发编程的强大工具,它结合了主动对象模式,提供了一种有效管理和调度并发任务的方式。通过深入学习和实践,开发者能够利用ACE框架构建出高效、可靠的并发应用程序。

    ACE继承层次图

    ACE(Adaptive Communication Environment)是一个面向对象的框架,用于开发高性能的网络应用和服务。它提供了一系列跨平台的C++类库来支持并发、通信和中间件服务。理解ACE的类继承层次对于深入掌握其内部机制至关...

    ACE-inheritance

    ACE提供了多种连接策略和资源管理类,用于优化不同场景下的网络通信性能: - `ACE_Connection_Recycling_Strategy`:实现连接复用,减少频繁建立和关闭连接带来的开销。 - `ACE_Connection_Strategy`:定义连接建立...

    ACE基本的多线程编程[文].pdf

    首先,创建多线程的核心在于定义一个继承自`ACE_Task_Base`或`ACE_Task`的类。`ACE_Task`是一个抽象基类,它为多线程服务提供了一个标准的接口。在派生类中,我们需要重载`virtual int svc(void)`函数,这个函数将...

    利用ace的ACE_Task等类实现线程池的方法详解

    总结来说,利用ACE的`ACE_Task`等类实现线程池,主要是通过继承`ACE_Task`并扩展其功能,定义线程池的初始化、启动、关闭方法,以及可能的线程同步机制。`Thread_Pool`类提供了一个抽象层,使得应用程序可以方便地...

    ACE相关类的使用说明

    - **ACE_Task**: 这是ACE中的基本工作单元,它可以作为一个线程或者多线程的任务,支持同步和异步操作。 - **ACE_Scheduler**: 提供任务调度功能,可以根据优先级、截止时间等策略管理任务。 - **ACE_Acceptor**:...

    ACE简单例子 并附说明

    - **线程管理**:ACE具有强大的线程管理能力,包括线程管理类`ACE_Thread_Manager`等。 - **任务管理**:ACE的任务管理机制主要通过`ACE_Task`类实现。 - **网络通信**:ACE提供了完善的网络通信功能。 - **反应器...

    ACE.rar_ACE 网络 编程_visual c

    2. ACE_Task:提供了一种线程池的实现,可以管理和调度工作线程,提高系统效率。 五、ACE的内存管理 ACE提供了强大的内存管理机制,如ACE_Allocator,支持池化内存分配,避免了频繁的小块内存分配带来的性能开销。 ...

    VC++ ACE线程代码实例11例子

    1 ACE_Thread_Manager类创建线程组 2 ACE_Thread_Manage类线程挂起、继续、取消操作 3 ACE_TSS模板的线程专有变量 4 创建线程和线程互斥 5 动态更换互斥方法 6 使用令牌互斥方法 7 守卫锁也是自动锁方法 8 条件等待 ...

    C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks

    - 第6章讨论了ACE任务框架,重点讲解了ACE_Message_Queue和ACE_Task类,它们支持任务的创建、执行以及消息队列的管理,从而实现了多线程环境下的任务调度和消息传递。 7. ACE接受器-连接器框架 - 第7章讲述了ACE...

    开源利器ACE

    OS 抽象层提供了对 OS 接口的 C 语言封装,包括文件管理、内存管理、进程/线程管理、IPC/RPC 机制、同步机制、时钟和信号处理等。ACE 对于 OS 接口的抽象是比较全面的,几乎相当于一个 C 语言的虚拟机。 C++ 封装层...

    ACE编程(linux平台)借鉴.pdf

    ACE编程在Linux平台上,特别是在Red Hat Linux 9 (Shrike)环境下,主要涉及多线程的创建、线程通信与线程同步等关键概念。在多线程编程中,线程的创建是基础,ACE库提供了方便的API来支持这一功能。 线程通信和同步...

    ACE入门 编译 配置 中文版

    ACE还提供了ACE_Thread类,用于管理线程的生命周期,包括创建、设置优先级、挂起、恢复、取消、同步、等待等。 ACE中的线程管理功能特别丰富,例如ACE_Thread::spawn()方法用于创建新线程并执行一个函数。我们可以...

    ACE编程(linux平台)[归类].pdf

    ACE编程在Linux平台上的应用主要涉及多线程编程、线程通信与同步、守卫类、消息块的使用以及消息处理等核心概念。以下是对这些知识点的详细解释: 1. **多线程创建**:在Linux(如Red Hat Linux release 9)中,ACE...

    ACE开发指南

    - **实现**:定义一个继承自`ACE_Task&lt;ACE_MT_SYNCH&gt;`的类,通过重写`svc`方法来处理任务。 #### 6. 总结与常见问题 - **总结**:回顾了ACE框架的核心概念和使用方法。 - **常见问题**:列出了一些常见的问题及其...

Global site tag (gtag.js) - Google Analytics