ACE_Task封装了任务,每个任务都含有一或多个线程,以及一个底层消息队列。各个任务通过这些消息队列进行通信。
其主要成员如下:
open():初始化资源
close():释放资源
activate():启动线程,可指定线程的数目
svc():线程的启动位置
putq():放置消息到任务的消息队列中
getq():从任务的消息队列中取出消息
thr_count():返回任务中线程的数目
last_thread():返回任务中将线程计数器从1降为0的线程的ID
...
PS: 由于ACE_Task对象一般是在堆中创建的,因此必须要进行释放操作.
class
CTaskDemo :
public
ACE_Task
<
ACE_MT_SYNCH
>
{
public :
virtual int open ( void * args = 0 )
{
activate( THR_NEW_LWP, 1 );
return 0 ;
}
virtual int close (u_long flags = 0 )
{
if ( ACE_OS::thr_equal ( ACE_Thread::self (), this -> last_thread () ) )
{
// 释放对象
delete this ;
}
return 0 ;
}
virtual int svc ( void )
{
return 0 ;
}
};
{
public :
virtual int open ( void * args = 0 )
{
activate( THR_NEW_LWP, 1 );
return 0 ;
}
virtual int close (u_long flags = 0 )
{
if ( ACE_OS::thr_equal ( ACE_Thread::self (), this -> last_thread () ) )
{
// 释放对象
delete this ;
}
return 0 ;
}
virtual int svc ( void )
{
return 0 ;
}
};