不做解释.
#pragma once
#include "dllmain.h"
#include <ace/Task.h>
#include <ace/Activation_Queue.h>
#include <ace/Method_Request.h>
class CPPXCORBA_API ACE_Scheduler : public ACE_Task_Base
{
class ExitMethod : public ACE_Method_Request
{
public:
virtual int call (void){
return -1; // Cause exit.
}
};
public:
ACE_Scheduler(void);
virtual int svc(void);
int enqueue (ACE_Method_Request *request);
void exit(void);
private:
ACE_Activation_Queue activation_queue_;
};
#include "ACE_Scheduler.h"
ACE_Scheduler::ACE_Scheduler( void )
{
activate();
}
int ACE_Scheduler::svc( void )
{
while(1){
// Dequeue the next method object
auto_ptr<ACE_Method_Request> request(activation_queue_.dequeue());
// Invoke the method request.
if (request->call () == -1)
break;
}
return 0x5678;
}
int ACE_Scheduler::enqueue( ACE_Method_Request *request )
{
ACE_TRACE (ACE_TEXT ("ACE_Scheduler::enqueue"));
return activation_queue_.enqueue (request);
}
void ACE_Scheduler::exit( void )
{
enqueue(new ExitMethod);
wait();
}
需要执行什么操作,创建一个ACE_Method_Request的子类,扔给它就是了.