ACE_Task笔记
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;
}
};