我想發出包含自動重置事件狀態的除錯輸出。這是為了幫助并發除錯。
可以通過等待超時為零來測驗自動重置事件的當前狀態。不幸的是,這會重置事件。所以我想,我會先測驗它,如果它已經設定好了,就再設定一次。
這種策略在它不可能改變應用程式其余部分的行為的意義上是否有效?
uj5u.com熱心網友回復:
這種策略在它不可能改變應用程式其余部分的行為的意義上是否有效?
當然,這會影回應用程式其余部分的行為。因為您不僅可以查詢狀態,還可以更改事件的狀態。
但是對于事件的查詢資訊存在特殊的api(未記錄)-它的??型別和狀態(當然,api回傳后的狀態可以在任何型別中更改)
typedef struct EVENT_BASIC_INFORMATION
{
EVENT_TYPE EventType;
LONG EventState;
} *PEVENT_BASIC_INFORMATION;
enum EVENT_INFORMATION_CLASS
{
EventBasicInformation
};
EXTERN_C
NTSYSAPI
NTSTATUS
NTAPI
NtQueryEvent (
_In_ HANDLE EventHandle,
_In_ EVENT_INFORMATION_CLASS EventInformationClass,
_Out_writes_bytes_(Length) PVOID EventInformation,
_In_ ULONG Length,
_Out_opt_ PULONG ReturnLength
);
使用示例
if (HANDLE hEvent = CreateEventW(0, 0, 0, 0))
{
EVENT_BASIC_INFORMATION ebi;
NtQueryEvent(hEvent, EventBasicInformation, &ebi, sizeof(ebi), 0);
SetEvent(hEvent);
NtQueryEvent(hEvent, EventBasicInformation, &ebi, sizeof(ebi), 0);
NtClose(hEvent);
}
請注意,自動重置事件 - 這是SynchronizationEvent和手動重置事件 - 這是NotificationEvent
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/412089.html
標籤:
