ACE 的条件锁 和互斥锁

#ifndef PROCESS_THREAD_H
#define PROCESS_THREAD_H
#include "ace/Thread.h"
#include "ace/Thread_Mutex.h"
#include "ace/Synch.h"
#include "IProcess.h"

static ACE_THR_FUNC_RETURN ProcessThreadFunc(void* pVoid);
class ProcessThread
{
public:
ProcessThread();
~ProcessThread();
bool Start();
bool Stop();
void Process(IProcess* pProcess,void* pVoid);
protected:
bool Suspend();
bool Resume();
void Service();
private:
bool m_flag;
bool m_status;
ACE_thread_t m_hThread;
IProcess* m_pProcess;
void* m_pParam;
ACE_Thread_Mutex m_hMutex;
ACE_Condition_Thread_Mutex m_hCond;
friend ACE_THR_FUNC_RETURN ProcessThreadFunc(void* pVoid);
};
#endif

 

实现

#include "ProcessThread.h"
#include "ThreadPool.h"
ProcessThread::ProcessThread():m_hCond(m_hMutex)
{
m_pProcess=NULL;
}
ProcessThread::~ProcessThread()
{

}
bool ProcessThread::Start()
{
m_flag=true;
Suspend();//启动时候暂停

if(ACE_Thread::spawn(ProcessThreadFunc,this,0,&m_hThread)==-1)return false;
return true;
}
bool ProcessThread::Stop()
{

Resume();
m_flag=false;///放在此处避免重复删除

ACE_Thread::join(m_hThread,NULL,NULL);
return true;
}
bool ProcessThread::Suspend()
{
m_status=false;

return false;
}
bool ProcessThread::Resume()
{
m_status=true;

m_hMutex.acquire();
m_hCond.signal();
m_hMutex.release();

return true;
}
void ProcessThread::Service()
{
while(m_flag)
{
do{
m_hMutex.acquire();
m_hCond.wait();
m_hMutex.release();

}while(!m_status);//如果未设置继续,则一直等待

m_status=false;

if(!m_pProcess){
break; /*** 如果处理的对象为NULL直接退出*/
}
else {
if(m_flag){
m_pProcess->Process(m_pParam);

ThreadPool::Instance()->PutThread(this);
}
}
m_pProcess=NULL;
}
}
void ProcessThread::Process(IProcess* pProcess,void* pVoid)
{
m_pProcess=pProcess;
m_pParam=pVoid;
Resume();
}
ACE_THR_FUNC_RETURN ProcessThreadFunc(void* pVoid)
{
ProcessThread* pProcessThread=(ProcessThread*)pVoid;
pProcessThread->Service();
return 0;
}

 

转载于:https://www.cnblogs.com/rosesmall/archive/2012/04/24/2467575.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值