/** * @file NFThreadManager.h * @brief Auto ThreadManager Ŭ·¡½º * @remarks * @author °­µ¿¸í(edith2580@gmail.com) * @date 2009-04-02 */ #pragma once #define WINDOWS_LEAN_AND_MEAN #include #include #include "NFSync.h" #include "NFThread.h" namespace Nave { /** * @class NFThreadManager * @brief ½º·¹µå ¸Å´ÏÁ® * @remarks * 1) NFThread ¸¦ »ó¼Ó¹ÞÀº ³à¼® \r\n * \r\n * Nave::NFThreadManager::Run(this); \r\n * Nave::NFThreadManager::Stop(this, 2000); \r\n * \r\n * 2) ½º·¹µå ¸Å´ÏÁ®¸¦ »ç¿ëÇÏ·Á¸é \r\n * Nave::NFThreadManager::GetInstance().Register( new CTest(this) ); \r\n * \r\n * // ¼Ò¸ê½Ã ÀÚµ¿À¸·Î UnRegister°¡ È£ÃâµÇ¾î¸Þ¸ð¸®¿¡¼­ »èÁ¦µÊ.. \r\n * * @par * @author Edith * @date 2009-04-05 */ class NFThreadManager : public Nave::NFSingleton { public: /// NFThreadManager »ý¼ºÀÚ NFThreadManager(); /// NFThreadManager ¼Ò¸êÀÚ virtual ~NFThreadManager(); /// ½º·¹µå¸¦ µî·ÏÇÑ´Ù. ÃÖ´ë 32°³±îÁö µî·ÏÇÒ ¼ö ÀÖ´Ù. BOOL Register(NFThread* lpThread); /// ¸ðµç ½º·¹µå¸¦ Á¾·á½ÃŲ´Ù. BOOL UnRegister(); /// ¸Å´ÏÀú¸¦ »ç¿ëÇÏÁö ¾Ê°í, ±×³É ½ÇÇà ½ÃŲ´Ù. static HANDLE Run(NFThread* lpThread); /// ¸Å´ÏÀú¸¦ »ç¿ëÇÏÁö ¾Ê°í, ±×³É Á¾·á ½ÃŲ´Ù. static BOOL Stop(NFThread* lpThread, unsigned long dwTimeout = INFINITE); private: enum { MAX_THREAD_NUM = 32 /// ÃÖ´ë ½º·¹µå °³¼ö }; /// ½º·¹µå °´Ã¼ Æ÷ÀÎÅÍ NFThread* m_lpThreads[MAX_THREAD_NUM]; /// ½º·¹µå ÇÚµé HANDLE m_hThreads[MAX_THREAD_NUM]; /// ½º·¹µå Lock Nave::NFSync m_ThreadLock; /// ½º·¹µå °³¼ö Nave::uint32 m_nThreadNum; /// UnRegisterÀÇ ÁøÇà¿©ºÎ Nave::uint32 m_bUnRegStarted; }; }