queue sample

http://www.iteye.com/topic/477412

 

#include "StdAfx.h"
#include "TaskQueue.h"

#include <process.h>
#include <boost/thread/shared_mutex.hpp>
#include <boost/thread.hpp>


using namespace std;


typedef boost::shared_mutex rwmutex;
typedef boost::shared_lock<rwmutex> readLock;
typedef boost::unique_lock<rwmutex> writeLock;
rwmutex _rwmutex;

static TaskQueue* taskQueueInstance;

TaskQueue::TaskQueue()
{
}

TaskQueue::~TaskQueue(void)
{
}

TaskQueue* TaskQueue::GetInstance()
{
 if(taskQueueInstance == NULL)
 {
  taskQueueInstance = new TaskQueue();
 }

 return taskQueueInstance;
}

int TaskQueue::GetSize()
{
 try
 {
  int size = TQ.size();
  return size;
 }
 catch (const std::exception& ex)
 {
  fprintf(stderr, "reason: %s\n", ex.what());
  return 0;
 }
}

void TaskQueue::GetQueue(queue<taskInfo>& queueTaskInfo)
{
 writeLock lk(_rwmutex);
 try
 {
  queueTaskInfo = TQ;
  lk.unlock();
 }
 catch (const std::exception& ex)
 {
  fprintf(stderr, "reason: %s\n", ex.what());
 }
}

void TaskQueue::Push(taskInfo ti)
{
 writeLock lk(_rwmutex);
 try
 {
  TQ.push(ti);
  lk.unlock();
 }
 catch (const std::exception& ex)
 {
  fprintf(stderr, "reason: %s\n", ex.what());
 }
}

void TaskQueue::Front(taskInfo& ti)
{
 if(TQ.size()>0)
 {
  writeLock lk(_rwmutex);
  ti = TQ.front();
  lk.unlock();
 }
}

void TaskQueue::Back()
{
 if(TQ.size()>0)
 {
  writeLock lk(_rwmutex);
  TQ.back();
  lk.unlock();
 }
}

void TaskQueue::Pop()
{
 if(TQ.size()>0)
 {
  writeLock lk(_rwmutex);
  TQ.pop();
  lk.unlock();
 }
}

void TaskQueue::Empty()
{
 writeLock lk(_rwmutex);
 while(!TQ.empty())
 {
  TQ.pop();
 }
 lk.unlock();
}

 

 

#pragma once
#include "DataModel.h"
#include <queue>

class TaskQueue
{
public:
 static TaskQueue* TaskQueue::GetInstance();

 queue<taskInfo> TQ;
 int TaskQueue::GetSize();
 void TaskQueue::GetQueue(queue<taskInfo>& queueTaskInfo);
 void TaskQueue::Push(taskInfo ti);
 void TaskQueue::Front(taskInfo& ti);
 void TaskQueue::Pop();
 void TaskQueue::Back();
 void TaskQueue::Empty();
public:
 TaskQueue();
 ~TaskQueue(void);
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值