DragonNest/Common/Utility/BackgroundLoader.h
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

66 lines
1.5 KiB
C++

#pragma once
#include "CriticalSection.h"
class CBackgroundLoader;
class CStream;
struct SLoaderInfo
{
CBackgroundLoader *pLoader;
CStream *pStream;
};
class CBackgroundLoaderCallback
{
public:
CBackgroundLoaderCallback() {}
virtual ~CBackgroundLoaderCallback();
virtual void OnLoadComplete( CBackgroundLoader *pLoader );
protected:
std::vector< CBackgroundLoader * > m_vecCallbackPushedLoader;
public:
void CallbackPush( CBackgroundLoader *pLoader ) { m_vecCallbackPushedLoader.push_back( pLoader ); }
};
class CBackgroundLoader
{
public:
CBackgroundLoader(void);
virtual ~CBackgroundLoader(void);
protected:
static bool s_bBeginBackgroundLoad;
static bool s_bNowLoading;
static HANDLE s_hThread;
static std::vector< SLoaderInfo > s_vecLoadList;
static CSyncLock m_LoadListLock;
static HANDLE s_hLoaderEvent[ 2 ];
bool m_bReady;
std::vector< CBackgroundLoaderCallback * > m_vecCallback;
public:
virtual int LoadResource( CStream *pStream ) { return 1;}
void SetReady( bool bReady );
bool IsReady() { return m_bReady; }
bool AddCallback( CBackgroundLoaderCallback *pCallback );
void EraseCallback( CBackgroundLoaderCallback *pCallback );
void ProcessCallback();
static bool IsBeginBackgroundLoad() { return s_bBeginBackgroundLoad; }
static void BeginBackgroundLoad();
static void EndBackgroundLoad();
static int GetRemainLoaderCount();
static void PushLoader( CBackgroundLoader *pLoader, CStream *pStream );
static bool PopLoader( SLoaderInfo &LoaderInfo );
static DWORD WINAPI BackgroundLoaderCallback( LPVOID pParam );
};