## Monitor class


فئة [Monitor](./) توفر آلية تُزامن الوصول إلى الكائنات.

```cpp
class Monitor : public System::Object
```

## الطرق

| طريقة | الوصف |
| --- | --- |
| static [Enter](./enter/)(const SharedPtr\<Object\>\&) | يستحوذ على قفل حصري على كائن محدد. |
| static [Enter](./enter/)(const System::SharedPtr\<Object\>\&, bool\&) | يستحوذ على قفل حصري على الكائن المحدد، ويضبط قيمةً ذريةً تشير إلى ما إذا تم أخذ القفل. |
| static [Exit](./exit/)(const SharedPtr\<Object\>\&) | يفرج عن قفل حصري على الكائن المحدد. |
| static [IsEntered](./isentered/)(const System::SharedPtr\<Object\>\&) | يحدد ما إذا كان الخيط الحالي يمتلك القفل على الكائن المحدد. |
| static [Pulse](./pulse/)(const SharedPtr\<Object\>\&) | يُخطر خيطًا في طابور الانتظار بتغيير في حالة الكائن المقفل غير مُنفّذ. |
| static [PulseAll](./pulseall/)(const SharedPtr\<Object\>\&) | يُخطر جميع الخيوط المنتظرة بتغيير في حالة الكائن غير مُنفّذ. |
| static [TryEnter](./tryenter/)(const SharedPtr\<Object\>\&) | محاولات للحصول على قفل حصري على الكائن المحدد غير مُنفّذ. |
| static [TryEnter](./tryenter/)(const System::SharedPtr\<Object\>\&, bool\&) | محاولات للحصول على قفل حصري على الكائن المحدد، وتضبط قيمةً ذريةً تشير إلى ما إذا تم أخذ القفل. |
| static [TryEnter](./tryenter/)(const SharedPtr\<Object\>\&, int32_t) | محاولات، للعدد المحدد من الملليثانية، للحصول على قفل حصري على الكائن المحدد غير مُنفّذ. |
| static [TryEnter](./tryenter/)(const SharedPtr\<Object\>\&, TimeSpan) | محاولات، للمدة المحددة من الوقت، للحصول على قفل حصري على الكائن المحدد غير مُنفّذ. |
| static [TryEnter](./tryenter/)(const System::SharedPtr\<Object\>\&, int32_t, bool\&) | يحاول، لمدة الوقت المحدد، الحصول على قفل حصري على الكائن المحدد، ويضبط قيمةً بصورة ذرية تشير إلى ما إذا تم أخذ القفل. |
| static [TryEnter](./tryenter/)(const System::SharedPtr\<Object\>\&, TimeSpan, bool\&) | يحاول، لمدة الوقت المحدد، الحصول على قفل حصري على الكائن المحدد، ويضبط قيمةً بصورة ذرية تشير إلى ما إذا تم أخذ القفل. |
| static [Wait](./wait/)(const SharedPtr\<Object\>\&, int32_t, bool) | يفرج القفل عن كائن ويوقف الخيط الحالي حتى يستعيد القفل. إذا انقضى الفاصل الزمني المحدد للمهلة، ينتقل الخيط إلى طابور الجاهزية. يمكن اختياريًا الخروج من نطاق المزامنة للسياق المتزامن قبل الانتظار واستعادة النطاق بعد ذلك. غير مُطبق. |
| static [Wait](./wait/)(const SharedPtr\<Object\>\&, TimeSpan, bool) | يفرج القفل عن كائن ويوقف الخيط الحالي حتى يستعيد القفل. إذا انقضى الفاصل الزمني المحدد للمهلة، ينتقل الخيط إلى طابور الجاهزية. يمكن اختياريًا الخروج من نطاق المزامنة للسياق المتزامن قبل الانتظار واستعادة النطاق بعد ذلك. غير مُطبق. |
| static [Wait](./wait/)(const SharedPtr\<Object\>\&, int32_t) | يفرج القفل عن كائن ويوقف الخيط الحالي حتى يستعيد القفل. إذا انقضى الفاصل الزمني المحدد للمهلة، ينتقل الخيط إلى طابور الجاهزية. غير مُطبق. |
| static [Wait](./wait/)(const SharedPtr\<Object\>\&, TimeSpan) | يفرج القفل عن كائن ويوقف الخيط الحالي حتى يستعيد القفل. إذا انقضى الفاصل الزمني المحدد للمهلة، ينتقل الخيط إلى طابور الجاهزية. غير مُطبق. |
| static [Wait](./wait/)(const SharedPtr\<Object\>\&) | يفرج القفل عن كائن ويوقف الخيط الحالي حتى يستعيد القفل غير مُطبق. |
## ملاحظات



```cpp
#include "system/threading/monitor.h"
#include "system/threading/thread.h"
#include "system/smart_ptr.h"
#include "system/string.h"
#include <iostream>
#include <vector>

int main()
{
  using namespace System::Threading;

  const auto threadsCount = 3;
  std::cout << "Threads count: " << threadsCount << std::endl;
  auto locker = System::MakeObject<System::Object>();
  int x = 0;

  std::vector<System::SharedPtr<Thread>> threads;
  threads.reserve(threadsCount);
  for (auto i = 0; i < threadsCount; ++i)
  {
    threads.emplace_back(System::MakeObject<Thread>([&x, &locker]() -> void {
      Monitor::Enter(locker);

      x = 1;
      for (auto i = 0; i < 5; ++i)
      {
        std::cout << Thread::get_CurrentThread()->get_Name() << ": " << x++ << std::endl;
        Thread::Sleep(100);
      }

      Monitor::Exit(locker);
    }));
    threads.back()->set_Name(System::String("Thread " + std::to_string(i)));
    threads.back()->Start();
  }

  Thread::Sleep(threadsCount * 100);

  for (auto& thread : threads)
  {
    thread->Join();
  }

  return 0;
}
/*
This code example produces the following output:
Threads count: 3
Thread 0: 1
Thread 0: 2
Thread 0: 3
Thread 0: 4
Thread 0: 5
Thread 1: 1
Thread 1: 2
Thread 1: 3
Thread 1: 4
Thread 1: 5
Thread 2: 1
Thread 2: 2
Thread 2: 3
Thread 2: 4
Thread 2: 5
*/
```

## انظر أيضًا

* Class [Object](../../system/object/)
* Namespace [System::Threading](../)
* Library [Aspose.Page for C++](../../)
