我使劲看了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;
}
头文件
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_;                // 是否退出
    }
;
posted on 2006-09-02 15:00  以天  阅读(891)  评论(0编辑  收藏  举报