// managermultiloader.h #ifndef _3DRENDERER_MANAGERMULTILOADER_H_ #define _3DRENDERER_MANAGERMULTILOADER_H_ #include "managerbase.h" #include #include class CThreadObject; // ¸ÖƼ¾²·¹µå ·Îµù ½ºÅ¸ÀÏ #define MLS_TEXTURE (0x00000001) #define MLS_WZD (0x00000002) #define MLS_DEFAULT (MLS_TEXTURE | MLS_WZD) // ÀüºÎ »ç¿ë // ·Îµù °´Ã¼ ŸÀÔ enum ENUM_LOADOBJTYPE { LOT_TEXTURE = 0, LOT_WZD }; // ·Îµù Å¥ ŸÀÔ enum ENUM_LOAD_QUEUE_TYPE { QUEUE_TYPE_QUICK = 0, QUEUE_TYPE_NORMAL, NUM_QUEUE_TYPE }; // ·Îµù °´Ã¼ struct St_LoadObject { ENUM_LOADOBJTYPE m_eLoadObjType; DWORD m_dwObject; }; // Loader function void ThreadFunc_Loader( void* pParam ); //------------------------------------------------------------------------------ /** @class CManagerMultiLoader */ class CManagerMultiLoader : public CManagerBase { public: // »ý¼ºÀÚ/¼Ò¸êÀÚ CManagerMultiLoader(); virtual ~CManagerMultiLoader(); // »ý¼º/ÆÄ±« virtual BOOL Create( CDrawBase* pParentDraw, void* pParam ); virtual void Destroy(); // Å¥¿¡ °´Ã¼ Ãß°¡ virtual void AddObjectToLoad( ENUM_LOADOBJTYPE eLoadObjType, DWORD dwObject, ENUM_LOAD_QUEUE_TYPE eyTpe = QUEUE_TYPE_NORMAL ); // ·Îµù virtual void New_Load(); // ¸ÖƼ ¾²·¹µå ·Îµù Äѱâ/²ô±â void TurnOn_MultiThreadedLoading( BOOL bOn ); // ¸ÖƼ ¾²·¹µå ·Îµù ¿©ºÎ BOOL IsTurnedOn_MultiThreadedLoading( DWORD dwStyle ) const; // ·Îµù ½ºÅ¸ÀÏ ¼³Á¤/¾ò±â void SetMultiThreadedLoadingStyle( DWORD dwStyle ); DWORD GetMultiThreadedLoadingStyle() const; // ·ÎµùÇÒ °´Ã¼ ¼ö ¾ò±â DWORD GetNumberOfLoadObject( ENUM_LOAD_QUEUE_TYPE eType ); // ÃÊ´ç ·Îµù ¼ö ¼³Á¤ (xxx: »ç¿ë ¾ÈÇÔ) void SetLoadCountPerSecond( int LoadPerSecond ); // ¾²·¹µå ¸ØÃã (xxx: »ç¿ë ¾ÈÇÔ) void ExitMultiThreadedLoading(); protected: // ¾²·¹µå °´Ã¼ »ý¼º/ÆÄ±« BOOL CreateThreadObject(); void DestroyThreadObject(); private: // º¯¼ö ÃʱâÈ­ void InitVariables(); // ÇØÁ¦ void ReleaseContents(); protected: CWzQueue m_loadQ[NUM_QUEUE_TYPE]; CThreadObject* m_pLoaderThread; DWORD m_dwLoadingStyle; BOOL m_bOn; WzDeclare_Sync( LoadObject ); }; //------------------------------------------------------------------------------ /** */ inline void CManagerMultiLoader::TurnOn_MultiThreadedLoading( BOOL bOn ) { m_bOn = bOn; } //------------------------------------------------------------------------------ /** */ inline BOOL CManagerMultiLoader::IsTurnedOn_MultiThreadedLoading( DWORD dwStyle ) const { return( m_bOn && ((m_dwLoadingStyle & dwStyle) == dwStyle) ); } //------------------------------------------------------------------------------ /** */ inline void CManagerMultiLoader::SetMultiThreadedLoadingStyle( DWORD dwStyle ) { m_dwLoadingStyle = dwStyle; } //------------------------------------------------------------------------------ /** */ inline DWORD CManagerMultiLoader::GetMultiThreadedLoadingStyle() const { return m_dwLoadingStyle; } //------------------------------------------------------------------------------ /** */ inline DWORD CManagerMultiLoader::GetNumberOfLoadObject( ENUM_LOAD_QUEUE_TYPE eType ) { WzSync_This( LoadObject ); WzAssert( eType >= 0 && eType < NUM_QUEUE_TYPE ); return m_loadQ[eType].GetCount(); } //------------------------------------------------------------------------------ /** */ inline void CManagerMultiLoader::SetLoadCountPerSecond( int ) { // »ç¿ë ¾ÈÇÔ } //------------------------------------------------------------------------------ /** */ inline void CManagerMultiLoader::ExitMultiThreadedLoading() { // »ç¿ë ¾ÈÇÔ } #endif // _3DRENDERER_MANAGERMULTILOADER_H_