好贷网好贷款

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

发布时间:2016-12-5 16:33:01 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"ACE线程管理机制-面向对象的线程类ACE_Task",主要涉及到ACE线程管理机制-面向对象的线程类ACE_Task方面的内容,对于ACE线程管理机制-面向对象的线程类ACE_Task感兴趣的同学可以参考一下。

我们在前一章中使用ACE_Thread包装时,你一定已经注意到了一些不够"优雅"的地方。那一章中的大多数程序都被分解为函数、而不是对象。这是因为ACE_Thread包装需要一个全局函数名、或是静态方法作为参数。随后该函数(静态方法)就被用作所派生的线程的"启动点"。这自然就使得程序员要为每个线程写一个函数。如我们已经看到的,这可能会导致非面向对象的程序分解。 ACE_Task对常用线程处理进行了OO包装,通过ACE_Task,能对线程进行更好的操作。 要创建任务,需要进行以下步骤: 实现服务初始化和终止方法: open()方法应该包含所有专属于任务的初始化代码。其中可能包括诸如连接控制块、锁和内存这样的资源。close()方法是相应的终止方法。调用启用(Activation)方法: 在主动对象实例化后,你必须通过调用activate()启用它。要在主动对象中创建的线程的数目,以及其他一些参数,被传递给activate()方法。activate()方法会使svc()方法成为所有它生成的线程的启动点。实现服务专有的处理方法: 如上面所提到的,在主动对象被启用后,各个新线程在svc()方法中启动。应用开发者必须在子类中定义此方法。 下面的例子演示怎样去创建任务: Cpp代码   #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的使用还不仅仅是这些,通过它还可实现一种很常用的网络编程模式--主动对象模式,其具体功能在后续的设计模式部分将作详细的介绍。

上一篇:listagg 函数--oracle 11g release 2
下一篇:oracle大型汇总报表写法及技巧

相关文章

相关评论