我使劲看了ACE中的LF示例,还是没有看出为什么作者要那么写,我把我简化版的LP线程贴出来,望大家批评批评。
void
SampleLFTaskPool::start(
const
char
*
name,
int
count,
int
high)
{
strncpy(threadName,name,19);
this->msg_queue()->high_water_mark(high);
this->activate(THR_NEW_LWP|THR_JOINABLE,count);
}
void SampleLFTaskPool::svc()
{
while(!bExit_)
{
ACE_Message_Block* mb=0;
{
ACE_GUARD(ACE_Thread_Mutex,mon,lock_);
if(getq(mb) <-1)
{
ACE_DEBUG((LM_ERROR,ACE_TEXT("%s Exited:%p"),threadName));
break;
}
}
pro(mb);
}
}
void SampleLFTaskPool::stop()
{
bExit_ = true;
}
头文件
{
strncpy(threadName,name,19);
this->msg_queue()->high_water_mark(high);
this->activate(THR_NEW_LWP|THR_JOINABLE,count);
}
void SampleLFTaskPool::svc()
{
while(!bExit_)
{
ACE_Message_Block* mb=0;
{
ACE_GUARD(ACE_Thread_Mutex,mon,lock_);
if(getq(mb) <-1)
{
ACE_DEBUG((LM_ERROR,ACE_TEXT("%s Exited:%p"),threadName));
break;
}
}
pro(mb);
}
}
void SampleLFTaskPool::stop()
{
bExit_ = true;
}
class
SampleLFTaskPool:
public
ACE_Task
<
ACE_MT_SYNCH
>
{
public:
SampleLFTaskPool(void);
~SampleLFTaskPool(void);
public:
virtual int start(const char* name,int count,int high);
virtual int svc (void);
virtual void pro(ACE_Message_Block* mb);
virtual int stop();
char threadName[20];
ACE_Thread_Mutex lock_; bool bExit_; // 是否退出
} ;
{
public:
SampleLFTaskPool(void);
~SampleLFTaskPool(void);
public:
virtual int start(const char* name,int count,int high);
virtual int svc (void);
virtual void pro(ACE_Message_Block* mb);
virtual int stop();
char threadName[20];
ACE_Thread_Mutex lock_; bool bExit_; // 是否退出
} ;