Win32ThreadPrivateData.h
上传用户:chinafayin
上传日期:2022-04-05
资源大小:153k
文件大小:2k
源码类别:

并行计算

开发平台:

Visual C++

  1. //
  2. // OpenThread library, Copyright (C) 2002 - 2003  The Open Thread Group
  3. //
  4. // This library is free software; you can redistribute it and/or
  5. // modify it under the terms of the GNU Lesser General Public
  6. // License as published by the Free Software Foundation; either
  7. // version 2.1 of the License, or (at your option) any later version.
  8. //
  9. // This library is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. // Lesser General Public License for more details.
  13. // 
  14. // You should have received a copy of the GNU Lesser General Public
  15. // License along with this library; if not, write to the Free Software
  16. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. // 
  18. //
  19. // Win32PrivateData.h - Private data structure for Thread
  20. // ~~~~~~~~~~~~~~~~~~~~~
  21. #ifndef _Win32PRIVATEDATA_H_
  22. #define _Win32PRIVATEDATA_H_
  23. #ifndef _WINDOWS_
  24. #define WIN32_LEAN_AND_MEAN
  25. #define _WIN32_WINNT 0x0400
  26. #include <windows.h>
  27. #endif
  28. #include "../Thread"
  29. namespace OpenThreads {
  30. class Win32ThreadPrivateData {
  31.     //-------------------------------------------------------------------------
  32.     // We're friendly to Thread, so it can use our data.
  33.     //
  34.     friend class Thread;
  35.     //-------------------------------------------------------------------------
  36.     // We're friendly to Win32PrivateActions, so it can get at some 
  37.     // variables.
  38.     //
  39.     friend class ThreadPrivateActions;
  40. private:
  41.     Win32ThreadPrivateData() {};
  42.     ~Win32ThreadPrivateData();
  43.     size_t stackSize;
  44.     bool stackSizeLocked;
  45.     bool isRunning;
  46.     volatile bool isCanceled;
  47. int  cancelMode; // 0 - deffered (default) 1-asynch 2-disabled  
  48.     bool detached;
  49.     bool idSet;
  50.     Thread::ThreadPriority threadPriority;
  51.     Thread::ThreadPolicy threadPolicy;
  52.     HANDLE tid;
  53.     int uniqueId;
  54.     static int nextId;
  55. public:
  56. struct TlsHolder{ // thread local storage slot
  57. DWORD ID;
  58. TlsHolder(): ID(TlsAlloc()){
  59. }
  60. ~TlsHolder(){
  61. TlsFree(ID);
  62. }
  63. };
  64. static TlsHolder TLS;
  65. };
  66. }
  67. #endif // !_PTHREADPRIVATEDATA_H_