ACE - ACE_Method_Request, ACE_Task, ACE_Task_Base

5 篇文章 1 订阅

// class ACE_Task : public ACE_Task_Base

 

 

# This is an example on how to implement a ACE thread pool.

 

#:cat t.C   
#include "ace/Synch.h"
#include "ace/Synch_T.h"
#include "ace/Activation_Queue.h"
#include "ace/Method_Request.h"

#include "ace/OS.h"
#include "ace/Task.h"
#include "ace/Activation_Queue.h"
#include "ace/Method_Request.h"
#include "ace/Synch.h"


class Task: public ACE_Method_Request
{
public:
    Task(int a):i(a) {};
    virtual ~Task() {};

public:
    virtual int call() {printf("%d/n",i);return 0;}

public:
        int i;
};


class ThreadPool: public ACE_Task<ACE_MT_SYNCH>
{
public:
        ThreadPool(int thread): mStatusRunning(false),mServerThreads(thread) {
                mQueue=new ACE_Activation_Queue(/*this->msg_queue()*/);
        }

        /** Start thread pool */
        int start(void *)
        {
                if (!mStatusRunning) {
                        activate(THR_NEW_LWP|THR_JOINABLE|THR_CANCEL_ENABLE|THR_CANCEL_ASYNCHRONOUS,
                                                mServerThreads);
                        mStatusRunning = true;
                }
                return 0;
        }

        /** Stop thread pool */
        int stop()
        {
                mStatusRunning = false;
                return 0;
        }

        /** Add a task */
        int addTask(Task *task)
        {
                if (task != NULL)
                        mQueue->enqueue(task);
                return 0;
        }

        int svc(void)
        {
                while(mStatusRunning)
                {
                        if (!mQueue->is_empty())
                        {
                std::auto_ptr<ACE_Method_Request> mo(this->mQueue->dequeue());

                if (mo->call() == -1)
                {
                                        printf("error/n");
                }
                                sleep(1);
                        }
                }
                return 0;
        }

private:
    ACE_Activation_Queue *mQueue;
    ACE_Thread_Mutex mAuditMutex;
private:
        int mServerThreads;
        bool mStatusRunning;
};

int main(int argc, char *argv[])
{
        ThreadPool *pool = new ThreadPool(2);
        pool->start(NULL);

        pool->addTask(new Task(1));
        pool->addTask(new Task(2));
        pool->addTask(new Task(3));
        pool->addTask(new Task(4));
        pool->addTask(new Task(5));


        printf("Before sleeping...");
        sleep(5);
        printf("After sleeping...");
}

 

 

/#:> cat Makefile

ACE_ROOT = .../vendor/Corba/ACE_TAO

CCFLAGS += -DACE_HAS_EXCEPTIONS -DSUN_CC_HAS_PVFC_BUG -D__ACE_INLINE__ -DACE_HAS_IPV6

LDFLAGS =

ACE_LIBS = -lACE

all: task

task: task.o
        CC $(CCFLAGS) -L$(ACE_ROOT)/lib  $(ACE_LIBS) -o $@ $^

%.o: %.C
        CC -c $(CCFLAGS) -I$(ACE_ROOT)/include -I$(ACE_ROOT)/include/ace -o $@ $^

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值