Files
2022-10-26 12:25:11 +08:00

127 lines
2.5 KiB
C++

#pragma once
//#include <vector>
//#include <deque>
#include <list>
//#include <hash_map>
#include "./Uitl/CriticalSection.h"
/**************************************************************************************************
작성일: 2009-03-12
작성자: 문상현 (youngmoon@webzen.co.kr)
설명: 잡 큐를 관리하는 클래스 (밸류 타입)
**************************************************************************************************/
template <typename _TQUVALUE>
class CQueue
{
public:
CQueue(void) : m_bAlive(false) {};
virtual ~CQueue(void) {};
protected:
std::list<_TQUVALUE> m_Que; //정량차감, 정액 기간 만료, 라이브 체크를 관리한다.
WZPUBLIC::CriticalSection m_cs; //m_JobQue 의 동기화 객체
public:
//작업을 큐에 넣는다.
void push(_TQUVALUE& job)
{
autolock(m_cs);
m_Que.push_back(job);
};
//작업을 큐에서 꺼내온다.
bool pop(_TQUVALUE& job)
{
autolock(m_cs);
if(!m_Que.empty())
{
job = m_Que.front();
m_Que.pop_front();
return true;
}
return false;
};
//큐를 비운다.
void clear()
{
autolock(m_cs);
m_Que.clear();
};
private:
bool m_bAlive; // 큐를 사용해도 되는지 여부를 가진다.
public:
bool GetQueueAlive() {return m_bAlive;};
void SetQueueAlive(bool Alive) {m_bAlive = Alive;};
};
/*
template <typename _TQUVALUE>
class CAutoDeleteJobValue
{
public:
CAutoDeleteJobValue(_TQUVALUE value){m_value = value;};
virtual ~CAutoDeleteJobValue(void) {delete m_value;};
_TQUVALUE m_value;
};
*/
/**************************************************************************************************
작성일: 2009-04-28
작성자: 문상현 (youngmoon@webzen.co.kr)
설명: 잡 큐를 관리하는 클래스 (포인트 타입)
**************************************************************************************************/
template <typename _TQUVALUE>
class CPtrQueue
{
public:
CPtrQueue(void) : m_bAlive(false) {};
virtual ~CPtrQueue(void) {};
protected:
std::list<_TQUVALUE> m_Que; //정량차감, 정액 기간 만료, 라이브 체크를 관리한다.
WZPUBLIC::CriticalSection m_cs; //m_JobQue 의 동기화 객체
public:
//작업을 큐에 넣는다.
void push(_TQUVALUE job)
{
autolock(m_cs);
m_Que.push_back(job);
};
//작업을 큐에서 꺼내온다.
bool pop(_TQUVALUE& job)
{
autolock(m_cs);
if(!m_Que.empty())
{
job = m_Que.front();
m_Que.pop_front();
return true;
}
return false;
};
//큐를 비운다.
void clear()
{
autolock(m_cs);
m_Que.clear();
};
private:
bool m_bAlive; // 큐를 사용해도 되는지 여부를 가진다.
public:
bool GetQueueAlive() {return m_bAlive;};
void SetQueueAlive(bool Alive) {m_bAlive = Alive;};
};