VulkanRaytracingCycles 0.0.0
Cycles Render Engine With VulkanRaytracingShaderModules. ( Experiment , in progress)
front::CriticalHole Struct Reference

#include <SignalVk.h>

Public Member Functions

void start ()
 
void stop ()
 
template<typename T , typename... Args>
auto enter (T &&f, Args... args)
 
bool next ()
 
void EnsureEscapeEnd ()
 
void Whack (bool all=false)
 

Public Attributes

CRITICAL_SECTION whack
 
CONDITION_VARIABLE mole
 
long numMole
 
bool escape
 
bool on
 

Detailed Description

Definition at line 365 of file SignalVk.h.

Member Function Documentation

◆ EnsureEscapeEnd()

void front::CriticalHole::EnsureEscapeEnd ( )

Definition at line 28 of file SignalVk.cpp.

28 {
29
30 if (on) {
31 EnterCriticalSection(&whack);
32 escape = true;
33
34 LeaveCriticalSection(&whack);
35
36 WakeAllConditionVariable(&mole);
37
38 }
39 };
CRITICAL_SECTION whack
Definition: SignalVk.h:367
CONDITION_VARIABLE mole
Definition: SignalVk.h:368

◆ enter()

template<typename T , typename... Args>
auto front::CriticalHole::enter ( T &&  f,
Args...  args 
)
inline

Definition at line 376 of file SignalVk.h.

376 {
377
378 EnterCriticalSection(&whack);
379
380
381
382 while (!f(args ...) && !escape) {
383 SleepConditionVariableCS(&mole, &whack, INFINITE);
384 };
385
386
387 if (escape)
388 {
389
390 LeaveCriticalSection(&whack);
391 return false;
392 };
393
394 return true;
395
396 };

◆ next()

bool front::CriticalHole::next ( )

InterlockedDecrement((LONG*)&numMole);

Definition at line 22 of file SignalVk.cpp.

22 {
24 LeaveCriticalSection(&whack);
25 return true;
26 };

◆ start()

void front::CriticalHole::start ( )

Definition at line 9 of file SignalVk.cpp.

9 {
10
11 InitializeConditionVariable(&mole);
12 InitializeCriticalSectionAndSpinCount(&whack, 8000);
13 escape = false;
14 on = true;
15 };

◆ stop()

void front::CriticalHole::stop ( )

Definition at line 16 of file SignalVk.cpp.

16 {
17 if (on) {
18 DeleteCriticalSection(&whack); on = false;
19 }
20 };

◆ Whack()

void front::CriticalHole::Whack ( bool  all = false)

Definition at line 40 of file SignalVk.cpp.

40 {
41 if (all)WakeAllConditionVariable(&mole);
42 else WakeConditionVariable(&mole);
43 };

Member Data Documentation

◆ escape

bool front::CriticalHole::escape

Definition at line 371 of file SignalVk.h.

◆ mole

CONDITION_VARIABLE front::CriticalHole::mole

Definition at line 368 of file SignalVk.h.

◆ numMole

long front::CriticalHole::numMole

Definition at line 370 of file SignalVk.h.

◆ on

bool front::CriticalHole::on

Definition at line 371 of file SignalVk.h.

◆ whack

CRITICAL_SECTION front::CriticalHole::whack

Definition at line 367 of file SignalVk.h.


The documentation for this struct was generated from the following files: