DotNetDupe
4.0.6
C++17/20 Implementation of the .NET Base Class Library (BCL)
Toggle main menu visibility
Loading...
Searching...
No Matches
ConditionVariable.cpp
Go to the documentation of this file.
1
#include "
pch.h
"
2
#include "
System/Threading/ConditionVariable.h
"
3
#include "
System/Threading/CriticalSection.h
"
4
#include <condition_variable>
5
#include <mutex>
6
#include <chrono>
7
8
namespace
DotNetDupe
{
9
namespace
System
{
10
namespace
Threading
{
11
12
struct
CSLockAdapter {
13
CriticalSection& cs;
14
void
lock() { cs.Enter(); }
15
void
unlock() { cs.Leave(); }
16
};
17
18
struct
ConditionVariable::Impl :
public
Object
{
19
std::condition_variable_any cv;
20
};
21
22
ConditionVariable::ConditionVariable
() {
23
m_pImpl =
SmartPointer<Impl>::NewShared
();
24
}
25
26
ConditionVariable::ConditionVariable
(
ConditionVariable
&& other)
noexcept
=
default
;
27
28
ConditionVariable
&
ConditionVariable::operator=
(
ConditionVariable
&& other)
noexcept
=
default
;
29
30
ConditionVariable::~ConditionVariable
() {
31
}
32
33
void
ConditionVariable::Wait
(
CriticalSection
& cs) {
35
CSLockAdapter adapter{cs};
36
m_pImpl->cv.wait(adapter);
37
}
38
39
bool
ConditionVariable::Wait
(
CriticalSection
& cs,
int
millisecondsTimeout) {
41
if
(millisecondsTimeout < 0) {
42
Wait
(cs);
43
return
true
;
44
}
45
47
CSLockAdapter adapter{cs};
48
auto
status = m_pImpl->cv.wait_for(adapter, std::chrono::milliseconds(millisecondsTimeout));
49
return
status == std::cv_status::no_timeout;
50
}
51
52
void
ConditionVariable::Pulse
() {
54
m_pImpl->cv.notify_one();
55
}
56
57
void
ConditionVariable::PulseAll
() {
59
m_pImpl->cv.notify_all();
60
}
61
}
62
}
63
}
ConditionVariable.h
Provides condition variable synchronization primitive for thread coordination.
CriticalSection.h
Provides a re-entrant mutual exclusion primitive for thread synchronization.
DotNetDupe::System::SmartPointer::NewShared
static SmartPointer< T > NewShared()
Creates a Shared SmartPointer, default constructing T.
Definition
SmartPointer.h:277
DotNetDupe::System::Threading::ConditionVariable
Provides a synchronization primitive that can be used to block a thread, or multiple threads,...
Definition
ConditionVariable.h:21
DotNetDupe::System::Threading::ConditionVariable::Wait
void Wait(CriticalSection &cs)
Releases the associated CriticalSection lock and blocks the current thread until signaled.
Definition
ConditionVariable.cpp:33
DotNetDupe::System::Threading::ConditionVariable::ConditionVariable
ConditionVariable()
Initializes a new instance of the ConditionVariable class.
Definition
ConditionVariable.cpp:22
DotNetDupe::System::Threading::ConditionVariable::Wait
bool Wait(CriticalSection &cs, int millisecondsTimeout)
Releases the associated CriticalSection lock and blocks the current thread until signaled or timeout ...
Definition
ConditionVariable.cpp:39
DotNetDupe::System::Threading::ConditionVariable::PulseAll
void PulseAll()
Notifies all waiting threads.
Definition
ConditionVariable.cpp:57
DotNetDupe::System::Threading::ConditionVariable::operator=
ConditionVariable & operator=(const ConditionVariable &)=delete
DotNetDupe::System::Threading::ConditionVariable::~ConditionVariable
virtual ~ConditionVariable()
Virtual destructor releasing condition variable resources.
Definition
ConditionVariable.cpp:30
DotNetDupe::System::Threading::ConditionVariable::Pulse
void Pulse()
Notifies one waiting thread.
Definition
ConditionVariable.cpp:52
DotNetDupe::System::Threading::CriticalSection
Provides a re-entrant mutual exclusion primitive for thread synchronization.
Definition
CriticalSection.h:19
DotNetDupe::System::Text::Json::JsonValueKind::Object
@ Object
Definition
JsonElement.h:23
DotNetDupe::System::Threading
Definition
AbandonedMutexException.h:11
DotNetDupe::System
Definition
Action.h:11
DotNetDupe
Definition
IServiceCollection.h:7
pch.h
DotNetDupe
ConditionVariable.cpp
Generated by
1.18.0