怎样把ACE_Task当作更高级的线程来使用
2009-01-02 18:02
#include "ace/OS.h"
#include "ace/Task.h"
class TaskOne: public ACE_Task<ACE_MT_SYNCH> {
public:
//Implement the Service Initialization and Termination methods
int open(void*)
{
ACE_DEBUG((LM_DEBUG,"(%t) Active Object opened /n"));
//Activate the object with a thread in it.
activate();
return 0;
}
int close(u_long)
{
ACE_DEBUG((LM_DEBUG, "(%t) Active Object being closed down /n"));
return 0;
}
#include "ace/Task.h"
class TaskOne: public ACE_Task<ACE_MT_SYNCH> {
public:
//Implement the Service Initialization and Termination methods
int open(void*)
{
ACE_DEBUG((LM_DEBUG,"(%t) Active Object opened /n"));
//Activate the object with a thread in it.
activate();
return 0;
}
int close(u_long)
{
ACE_DEBUG((LM_DEBUG, "(%t) Active Object being closed down /n"));
return 0;
}
int svc(void)
{
ACE_DEBUG((LM_DEBUG,
"(%t) This is being done in a separate thread /n"));
// do thread specific work here
//.......
//.......
return 0;
}
};
{
ACE_DEBUG((LM_DEBUG,
"(%t) This is being done in a separate thread /n"));
// do thread specific work here
//.......
//.......
return 0;
}
};
int main(int argc, char *argv[])
{
//Create the task
TaskOne *one=new TaskOne;
//Start up the task
one->open(0);
//wait for all the tasks to exit
ACE_Thread_Manager::instance()->wait();
ACE_DEBUG((LM_DEBUG,"(%t) Main Task ends /n"));
}
{
//Create the task
TaskOne *one=new TaskOne;
//Start up the task
one->open(0);
//wait for all the tasks to exit
ACE_Thread_Manager::instance()->wait();
ACE_DEBUG((LM_DEBUG,"(%t) Main Task ends /n"));
}
上面的例子演示怎样把ACE_Task当作更高级的线程来使用。在例子中,TaskOne类派生自ACE_Task,
并实现了 open()、close()和 svc()方法。在此任务对象实例化后,程序就调用它的 open()方法。该方法依次
调用 activate()方法,致使一个新线程被派生和启动。该线程的入口是 svc()方法。主线程等待主动对象线
程终止,然后就退出进程。
并实现了 open()、close()和 svc()方法。在此任务对象实例化后,程序就调用它的 open()方法。该方法依次
调用 activate()方法,致使一个新线程被派生和启动。该线程的入口是 svc()方法。主线程等待主动对象线
程终止,然后就退出进程。