Threads.h
上传用户:jxpjxmjjw
上传日期:2009-12-07
资源大小:5877k
文件大小:2k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. // Copyright (C) 2004 Team Python
  2. //  
  3. // This program is free software; you can redistribute it and/or modify
  4. // it under the terms of the GNU General Public License as published by
  5. // the Free Software Foundation; either version 2 of the License, or
  6. // (at your option) any later version.
  7. // 
  8. // This program is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. // GNU General Public License for more details.
  12. // 
  13. // You should have received a copy of the GNU General Public License
  14. // along with this program; if not, write to the Free Software 
  15. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  16. #ifndef WOWPYTHONSERVER_THREADS_H
  17. #define WOWPYTHONSERVER_THREADS_H
  18. #include "Common.h"
  19. #include "Singleton.h"
  20. #if PLATFORM == PLATFORM_WIN32
  21. #  define THREADCONVENTION __cdecl
  22. #  define THREADRETURN void
  23. #  define ENDTHREAD Threads::getSingleton( ).closeCurrentThread( ); return;
  24. #  define THREADTYPE uint32
  25. #else
  26. #  include <pthread.h>
  27. #  define THREADCONVENTION
  28. #  define THREADRETURN void *
  29. #  define ENDTHREAD Threads::getSingleton( ).closeCurrentThread( ); return NULL;
  30. #  define THREADTYPE pthread_t
  31. #endif
  32. #define THREADCALL THREADRETURN THREADCONVENTION
  33. class Threads : public Singleton < Threads > {
  34. public:
  35.   enum ThreadPriority {
  36.     TP_IDLE,
  37.     TP_LOWER,
  38.     TP_LOW,
  39.     TP_NORMAL,
  40.     TP_HIGH,
  41.     TP_HIGHER,
  42.     TP_REALTIME
  43.   };
  44.   void Fork( THREADRETURN ( THREADCONVENTION * child )( void * ), void * param, ThreadPriority priority );
  45.   void setCurrentPriority( ThreadPriority priority );
  46.   void closeCurrentThread( );
  47.   void closeAllThreads( );
  48. private:
  49.   int32 getPlatformPriority( ThreadPriority & priority );
  50.   typedef std::set < THREADTYPE > threadSet;
  51.   threadSet mThreads;
  52. };
  53. #endif