⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtask.cpp

📁 BCB下的高效开发包。包含大并发的网络库
💻 CPP
字号:
//---------------------------------------------------------------------------
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -