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

并行计算

开发平台:

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. // Win32Condition.c++ - C++ Condition class built on top of posix threads.
  20. // ~~~~~~~~~~~~~~~~~~~~
  21. //
  22. #include "../Condition"
  23. #include "Win32ConditionPrivateData.h"
  24. using namespace OpenThreads;
  25. Win32ConditionPrivateData::~Win32ConditionPrivateData()
  26. {
  27. }
  28. //----------------------------------------------------------------------------
  29. //
  30. // Decription: Constructor
  31. //
  32. // Use: public.
  33. //
  34. Condition::Condition() {
  35.     Win32ConditionPrivateData *pd =
  36.         new Win32ConditionPrivateData();
  37.     _prvData = static_cast<void *>(pd);
  38. }
  39. //----------------------------------------------------------------------------
  40. //
  41. // Decription: Destructor
  42. //
  43. // Use: public.
  44. //
  45. Condition::~Condition() {
  46.     Win32ConditionPrivateData *pd =
  47.        static_cast<Win32ConditionPrivateData *>(_prvData);
  48.     delete pd;
  49. }
  50. //----------------------------------------------------------------------------
  51. //
  52. // Decription: wait on a condition
  53. //
  54. // Use: public.
  55. //
  56. int Condition::wait(Mutex *mutex) {
  57.     Win32ConditionPrivateData *pd =
  58.         static_cast<Win32ConditionPrivateData *>(_prvData);
  59.     return pd->wait(*mutex, INFINITE);
  60. }
  61. //----------------------------------------------------------------------------
  62. //
  63. // Decription: wait on a condition, for a specified period of time
  64. //
  65. // Use: public.
  66. //
  67. int Condition::wait(Mutex *mutex, unsigned long ms) {
  68.     Win32ConditionPrivateData *pd =
  69.         static_cast<Win32ConditionPrivateData *>(_prvData);
  70.     return pd->wait(*mutex, ms);
  71. }
  72. //----------------------------------------------------------------------------
  73. //
  74. // Decription: signal a thread to wake up.
  75. //
  76. // Use: public.
  77. //
  78. int Condition::signal() {
  79.     Win32ConditionPrivateData *pd =
  80.         static_cast<Win32ConditionPrivateData *>(_prvData);
  81.     return pd->signal();
  82. }
  83. //----------------------------------------------------------------------------
  84. //
  85. // Decription: signal many threads to wake up.
  86. //
  87. // Use: public.
  88. //
  89. int Condition::broadcast() {
  90.     Win32ConditionPrivateData *pd =
  91.         static_cast<Win32ConditionPrivateData *>(_prvData);
  92.     return pd->broadcast();
  93. }