qtask.cpp

来自「BCB下的高效开发包。包含大并发的网络库」· C++ 代码 · 共 94 行

CPP
94
字号
//---------------------------------------------------------------------------
#pragma hdrstop
#include "QTask.h"
#include "QStdlib.h"
#include <assert.h>
#pragma package(smart_init)
using namespace N_QTask;
//---------------------------------------------------------------------------
IQTask* __stdcall IQTask::Create(int TimeOutMs)
{
        return new QTask(TimeOutMs);
}
//---------------------------------------------------------------------------
__stdcall QTask::QTask(int TimeOutMs)
    : IQTask()
    , m_IDMaker(910001)
    , m_TimeOut(TimeOutMs)
{
}
//---------------------------------------------------------------------------
__stdcall QTask::~QTask()
{

}
//---------------------------------------------------------------------------
void __stdcall QTask::Release(void)
{
        assert(this);
        delete this;
}
//---------------------------------------------------------------------------
__int64 __stdcall QTask::CreateTask(const std::string& Data)
{
        TaskItem Item;
        Item.Time = GetTick();
        Item.Data = Data;
        while(m_Item.find(m_IDMaker) == m_Item.end()) {//
                if (m_IDMaker <= 0)
                        return 0;
                ++ m_IDMaker;
        }
        m_Item[m_IDMaker] = Item;
        ++ m_IDMaker;//保证下次不会因最大ID销毁而被重用
        return m_IDMaker;
}
//---------------------------------------------------------------------------
std::string __stdcall QTask::GetTask(__int64 TaskID)const
{
        const TASK_MAP::const_iterator iter = m_Item.find(TaskID);
        if (iter == m_Item.end())
                return "";
        return iter->second.Data;
}
//---------------------------------------------------------------------------
void __stdcall QTask::SetTask(__int64 TaskID, const std::string& Data)
{
        TASK_MAP::iterator iter = m_Item.find(TaskID);
        if (iter == m_Item.end())
                return;
        iter->second.Data = Data;
}
//---------------------------------------------------------------------------
void __stdcall QTask::DestroyTask(__int64 TaskID)
{
        m_Item.erase(TaskID);
}
//---------------------------------------------------------------------------
void __stdcall QTask::Process(void)
{
        if (-1 == m_TimeOut)
                return;
        unsigned int CutTime = GetTick();
        TASK_MAP::iterator iter = m_Item.begin();
        const TASK_MAP::const_iterator iend = m_Item.end();
        std::vector<__int64> Del;
        for(; iter != iend; ++iter) {
                if (GetRealTickDifference(iter->second.Time, CutTime) > (unsigned int)m_TimeOut)
                        Del.push_back(iter->first);
        }
        for(unsigned int i = 0; i < Del.size(); ++i) {
                m_Item.erase(Del[i]);
        }
}
//---------------------------------------------------------------------------
unsigned int __stdcall QTask::GetCount(void)const
{
        return m_Item.size();
}
//---------------------------------------------------------------------------
void __stdcall QTask::ProcessIDGC(void)
{
        m_IDMaker = 910001;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?