From 2d420c05254d17b5f396305333673bae36abab44 Mon Sep 17 00:00:00 2001 From: Eelke Klein Date: Fri, 6 Jan 2017 07:22:35 +0100 Subject: [PATCH] new class: WaitHandleList helper for waiting on multiple events using the Win32 api. --- waithandlelist.cpp | 31 +++++++++++++++++++++++++++++++ waithandlelist.h | 26 ++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 waithandlelist.cpp create mode 100644 waithandlelist.h diff --git a/waithandlelist.cpp b/waithandlelist.cpp new file mode 100644 index 0000000..e05bba4 --- /dev/null +++ b/waithandlelist.cpp @@ -0,0 +1,31 @@ +#include "waithandlelist.h" +#include "win32event.h" + +WaitHandleList::WaitHandleList() = default; +WaitHandleList::~WaitHandleList() = default; + +WaitResultValue WaitHandleList::add(HANDLE h) +{ + m_waitHandles.push_back(h); + return WAIT_OBJECT_0 + static_cast(m_waitHandles.size() - 1); +} + +WaitResultValue WaitHandleList::add(Win32Event &e) +{ + return add(e.handle()); +} + +DWORD WaitHandleList::count() const +{ + return static_cast(m_waitHandles.size()); +} + +void WaitHandleList::clear() +{ + m_waitHandles.clear(); +} + +WaitHandleList::operator const HANDLE*() const +{ + return m_waitHandles.data(); +} diff --git a/waithandlelist.h b/waithandlelist.h new file mode 100644 index 0000000..376e817 --- /dev/null +++ b/waithandlelist.h @@ -0,0 +1,26 @@ +#ifndef WAITHANDLELIST_H +#define WAITHANDLELIST_H + +#include +#include + +class Win32Event; + +using WaitResultValue = DWORD; + +class WaitHandleList { +public: + WaitHandleList(); + ~WaitHandleList(); + + WaitResultValue add(HANDLE h); + WaitResultValue add(Win32Event &e); + DWORD count() const; + void clear(); + operator const HANDLE*() const; + +private: + std::vector m_waitHandles; +}; + +#endif // WAITHANDLELIST_H