KeyedEvent

Knihovna KeyedEvent umožňuje aplikacím pracovat se zajímavým synchronizačním primitivem, které se objevilo ve Windows XP – událostí na klíč (Keyed Event). Knihovna byla vytvořena, aby práce s tímto primitivem byla pohodlnější a mohli jste si i bez větších znalostí vyzkoušet, jak se tento zvláštní druh události chová v praxi. Teoretické chování je popsáno v knize ve čtvrté kapitole, která se věnuje synchronizaci.

Událost na klíč znamená konečné řešení problémů spjatých s kritickými sekcemi, které se vlekly již od Windows NT. Po zlepšení implementace ve Windows Vista na její bázi byla postavena další dvě synchronizační primitiva pro uživatelský režim: condition variable a RW zámky (Slim Reader Writer Lock).

Knihovna exportuje následující rutiny:

HANDLE WINAPI KECreateKeyedEvent(DWORD DesiredAccess, PCWSTR Name);
HANDLE WINAPI KEOpenKeyedEvent(DWORD DesiredAccess, PCWSTR Name);
DWORD WINAPI KEReleaseKeyedEvent(HANDLE KeyedEvent, PVOID Key, BOOL Alertable, PLARGE_INTEGER Timeout);
DWORD WINAPI KEWaitForKeyedEvent(HANDLE KeyedEvent, PVOID Key, BOOL Alertable, PLARGE_INTEGER Timeout);


První dvě funkce slouží k vytváření nových a získávání přístupu k již existujícím událostem na klíč. Tyto objekty mohou být také pojmenované. Knihovna jejich jména ukládá do adresáře BaseNamedObjects. Handle k těmto objektům může disponovat následujícími orpávněními:

  • KEYEDEVENT_WAIT (0x0001) – povoluje operaci Wait (KEWaitForKeyedEvent)
  • KEYEDEVENT_WAKE (0x0002) – povoluje operaci Releae (KEReleaseKeyedEvent)
  • KEYEDEVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x3) – plný přístup

Jelikož je událost na klíč objektem exekutivy, její handle se ruší standardním způsobem pro tyto entity: voláním funkce CloseHandle.

Další rutiny slouží k provádění operací Wait a Release, jejichž sémantika je popsána v knize. Tyto rutiny mohou vrátit jednu ze tří hodnot: WAIT_OBJECT_0 (úspěch), WAIT_TIMEOUT (časový limit vypršel) a WAIT_FAILED (při čekání došlo k chybě).

Knihovna byla testována na následujících verzích Windows:

Systém Verze kernelu
Windows XP 32bit 5.1.2600
Windows XP 64bit 5.2.3790
Windows Server 2003 R2 32bit 5.2.3790
Windows Server 2003 R2 64bit 5.2.3790
Windows Vista 32bit 6.1.6002
Windows Vista 64bit 6.1.6002
Windows 7 32bit 6.1.7601
Windows 7 64bit 6.1.7601

Stáhnout

Leave a Reply

Your email address will not be published. Required fields are marked *