Module: Windows::Synchronize

Defined in:
lib/windows/synchronize.rb

Constant Summary collapse

INFINITE =
0xFFFFFFFF
WAIT_OBJECT_0 =
0
WAIT_TIMEOUT =
0x102
WAIT_ABANDONED =
128
WAIT_ABANDONED_0 =
WAIT_ABANDONED
WAIT_FAILED =
0xFFFFFFFF
STATUS_WAIT_0 =
0
STATUS_ABANDONED_WAIT_0 =
128
STATUS_USER_APC =
192
STATUS_TIMEOUT =
258
STATUS_PENDING =
259
QS_ALLEVENTS =

Wake mask constants

0x04BF
QS_ALLINPUT =
0x04FF
QS_ALLPOSTMESSAGE =
0x0100
QS_HOTKEY =
0x0080
QS_INPUT =
0x407
QS_KEY =
0x0001
QS_MOUSE =
0x0006
QS_MOUSEBUTTON =
0x0004
QS_MOUSEMOVE =
0x0002
QS_PAINT =
0x0020
QS_POSTMESSAGE =
0x0008
QS_RAWINPUT =
0x0400
QS_SENDMESSAGE =
0x0040
QS_TIMER =
0x0010
MWMO_ALERTABLE =

Wait type constants

0x0002
MWMO_INPUTAVAILABLE =
0x0004
MWMO_WAITALL =
0x0001
EVENT_ALL_ACCESS =

Access rights

0x1F0003
EVENT_MODIFY_STATE =
0x0002
MUTEX_ALL_ACCESS =
0x1F0001
MUTEX_MODIFY_STATE =
0x0001
SEMAPHORE_ALL_ACCESS =
0x1F0003
SEMAPHORE_MODIFY_STATE =
0x0002
PRIVATE_NAMESPACE_FLAG_DESTROY =

Namespace flags

0x00000001

Instance Method Summary collapse

Instance Method Details

#HasOverlappedIoCompleted(overlapped) ⇒ Object

Macros



92
93
94
# File 'lib/windows/synchronize.rb', line 92

def HasOverlappedIoCompleted(overlapped)
  overlapped[0,4].unpack('L')[0] != STATUS_PENDING
end

#RUBY_CRITICAL(&block) ⇒ Object

This simulates the RUBY_CRITICAL macro from rubysig.h, although I’ve added the begin/ensure wrapper to boot.



99
100
101
102
103
104
105
106
107
108
# File 'lib/windows/synchronize.rb', line 99

def RUBY_CRITICAL(&block)
  critical_section = [0].pack('L')
  begin
    InitializeCriticalSection(critical_section)
    EnterCriticalSection(critical_section)
    block.call
  ensure
    LeaveCriticalSection(critical_section)
  end
end