ACE_Task 转

http://www.cnblogs.com/tianfang/archive/2006/12/05/583231.html 

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

  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的使用还不仅仅是这些,通过它还可实现一种很常用的网络编程模式--主动对象模式

原文地址:https://www.cnblogs.com/xianqingzh/p/1895297.html