module Windows::Synchronize

Constants

EVENT_ALL_ACCESS

Access rights

EVENT_MODIFY_STATE
INFINITE
MUTEX_ALL_ACCESS
MUTEX_MODIFY_STATE
MWMO_ALERTABLE

Wait type constants

MWMO_INPUTAVAILABLE
MWMO_WAITALL
PRIVATE_NAMESPACE_FLAG_DESTROY

Namespace flags

QS_ALLEVENTS

Wake mask constants

QS_ALLINPUT
QS_ALLPOSTMESSAGE
QS_HOTKEY
QS_INPUT
QS_KEY
QS_MOUSE
QS_MOUSEBUTTON
QS_MOUSEMOVE
QS_PAINT
QS_POSTMESSAGE
QS_RAWINPUT
QS_SENDMESSAGE
QS_TIMER
SEMAPHORE_ALL_ACCESS
SEMAPHORE_MODIFY_STATE
STATUS_ABANDONED_WAIT_0
STATUS_PENDING
STATUS_TIMEOUT
STATUS_USER_APC
STATUS_WAIT_0
WAIT_ABANDONED
WAIT_ABANDONED_0
WAIT_FAILED
WAIT_OBJECT_0
WAIT_TIMEOUT

Private Instance Methods

HasOverlappedIoCompleted(overlapped) click to toggle source

Macros

# File lib/windows/synchronize.rb, line 94
def HasOverlappedIoCompleted(overlapped)
  overlapped[0,4].unpack('L')[0] != STATUS_PENDING
end
RUBY_CRITICAL(&block) click to toggle source

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

# File lib/windows/synchronize.rb, line 101
def RUBY_CRITICAL(&block)
  critical_section = [0].pack('L')
  begin
    InitializeCriticalSection(critical_section)
    EnterCriticalSection(critical_section)
    block.call
  ensure
    LeaveCriticalSection(critical_section)
  end
end