码迷,mamicode.com
首页 > 系统相关 > 详细

ACE_linux:任务 & 命令(Task and Command)

时间:2015-01-22 15:19:54      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:

1.涉及类

ACE_Task//ACE任务
ACE_Activation_Queue//ACE命令队列

ACE_Method_Request//ACE请求(命令)

2.简介

ACE主动对象模式

主动对象模式用于降低方法执行和方法调用之间的耦合。该模式描述了另外一种更为透明的任务间通信方法。

传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的,当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象却不一样。这些对象具有自己的命令执行线程,主动对象的方法将在自己的执行线程中执行,不会阻塞调用方法。

3.代码示例

技术分享
 1 #include "ace/Task.h"
 2 #include "ace/Method_Request.h"
 3 #include "ace/Activation_Queue.h"
 4 #include <iostream>
 5 using namespace std;
 6 
 7 class Logger: public ACE_Task<ACE_MT_SYNCH>
 8 {
 9 public:
10     Logger() {}
11     int svc();
12     void LogMsg(const string& msg);
13     void LogMsgActive (const string& msg);
14 private:
15     ACE_Activation_Queue cmdQueue;    //命令队列
16 };
17 class LogMsgCmd: public ACE_Method_Request
18 {
19 public:
20     LogMsgCmd(Logger *log,const string& msg)
21     {
22         this->log=log;
23         this->msg=msg;
24     }
25     virtual int call()
26     {
27         log->LogMsg(msg);
28         return 0;
29     }
30 private:
31     Logger *log;
32     string msg;
33 };
34 void Logger::LogMsg(const string& msg)
35 {
36     cout<<msg<<endl;
37 }
38 //以主动的方式记录日志
39 void Logger::LogMsgActive(const string& msg)
40 {
41     //生成命令对象,插入到命令队列中
42     cmdQueue.enqueue(new LogMsgCmd(this,msg));   //enqueue  入队列
43 }
44 int Logger::svc()
45 {
46     while(true)
47     {
48         //遍历命令队列,执行命令(auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理)
49         auto_ptr<ACE_Method_Request> pMsgCmd(cmdQueue.dequeue ());  //dequeue 出队列
50         pMsgCmd->call();
51     }
52     return 0;
53 }
54 int main (int argc, ACE_TCHAR *argv[])
55 {
56     Logger log;
57     log.activate();
58 
59     for(int i=0;i<4;i++)
60     {
61         log. LogMsgActive ("hello");
62         ACE_OS::sleep(1);
63         log.LogMsgActive("book");
64         ACE_OS::sleep(1);
65     }
66 
67     log.wait();
68     return 0;
69 }
Logger.cpp

4.结果

技术分享
1 $ ./tt
2 hello
3 book
4 hello
5 book
6 hello
7 book
8 hello
9 book
View Code

 

ACE_linux:任务 & 命令(Task and Command)

标签:

原文地址:http://www.cnblogs.com/book-gary/p/4241564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!