66 lines
1.5 KiB
C++
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 );
|
|
|
|
};
|
|
|