Files
mir_server/server/LogicServer/base/BackResLoadModule.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

87 lines
2.3 KiB
C++

#pragma once
//////////////////////////////////////////////////////////////////////////
// 后台资源加载模块,负责后台加载一些程序需要优先级不太高的配置和数据。
enum BackResLoadType
{
enResLoad_Null, // 无效类型
enResLoad_Item, // 加载物品配置
enResLoad_Monster, // 加载怪物配置
};
enum ResLoadResultType
{
enResLR_succ = 1, // 加载成功
enResLR_fail, // 加载失败
enResLR_Unknown, // 位置原因
};
class CResLoadTask
{
public:
CResLoadTask() : m_resLoadType(enResLoad_Null){}
BackResLoadType m_resLoadType;
DECLARE_OBJECT_COUNTER(CResLoadTask)
};
class CBackResLoadModule : public wylib::thread::CBaseThread
{
public:
CBackResLoadModule();
~CBackResLoadModule();
// 线程执行处理
void OnRountine();
// 开始工作线程
void Start();
// 停止工作线程
void Stop();
// 供逻辑工作线程调用的例行处理
void RunOne(TICKCOUNT nCurrentTick);
// 加载物品配置数据
void LoadItemConfig();
void LoadConfig(BackResLoadType resLoadType);
void LoadMonsterConfig();
protected:
// 获取下一个资源加载任务
CResLoadTask GetNextResLoadData();
// 添加一个完成任务
void AddFinishedTask(const CResLoadTask &task);
// 加载物品资源
bool LoadItemResImpl();
// 加载怪物资源
bool LoadMonsterResImpl();
private:
enum
{
IDLE_SLEEP_INTERVAL = 500, // 空闲时Sleep时间
TASK_END_SLEEP_INTERVAL = 10, // 任务结束Sleep时间
};
CBaseLinkedList<CResLoadTask> m_resLoadList; // 资源加载列表
CCSLock m_resLock; // 添加资源列表访问锁
CCSLock m_finishedResLock; // 完成资源列表访问锁
CVector<CResLoadTask> m_finishedList; // 资源加载完成列表
CVector<CResLoadTask> m_finished2List; // 资源加载完成列表
CTimer<2000> m_UpdateFinishListTimer; // 更新完成列表定时器
#ifdef WIN32
HANDLE m_hStartEvent; // 线程开始同步事件
HANDLE m_hStopEvent; // 线程停止同步事件
#else
sem_t m_hStartEvent; // 线程开始同步事件
sem_t m_hStopEvent; // 线程停止同步事件
#endif
volatile LONG m_bThreadStarted; // 线程启动标记
volatile LONG m_bThreadRuning; // 线程启动的标记
};