MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_event_register_list.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_EVENT_REGISTER_LIST_H_1608699070
12#define INCGUARD_MGL_EVENT_REGISTER_LIST_H_1608699070
13
14#include <condition_variable>
15#include <mutex>
16#include <thread>
17
22
23namespace MGL::Event
24{
27{
28 UniqueID id{0};
29 NotifyType type{NotifyType::Reserve_Invalid};
31 void *callbackArg{nullptr};
32};
33
36{
37public:
38 RegisterList() noexcept;
39
40 bool Register(STL::unique_ptr<RegisterItem> item) noexcept;
41 void Unregister(Handle &handle) noexcept;
42
43 bool Execute(void *notifyArg) noexcept;
44
45private:
47
48 bool IsRunning() const noexcept;
49 bool IsRunning(UniqueID id) const noexcept;
50 bool IsSameThread() const noexcept;
51
52 void ApplyTemporaryRegisterList() noexcept;
53 void ApplyTemporaryUnregisterList() noexcept;
54 bool IsRequestedUnregister(UniqueID id) noexcept;
55
56 ItemList _activeList;
57 ItemList _temporaryRegisterList;
58 STL::list<Handle> _temporaryUnregisterList;
59
60 std::atomic<std::thread::id> _currentThreadId;
61 std::mutex _activeListMutex;
62 std::mutex _temporaryListMutex;
63
64 std::condition_variable _syncExecute;
65 std::mutex _syncExecuteMutex;
66 UniqueID _executeUniqueId{0};
67};
68
69} // namespace MGL::Event
70
71#endif // INCGUARD_MGL_EVENT_REGISTER_LIST_H_1608699070
72
73// vim: et ts=4 sw=4 sts=4
イベントハンドルクラス
Definition mgl_event_handle.h:21
登録リスト
Definition mgl_event_register_list.h:36
void Unregister(Handle &handle) noexcept
リストから登録解除
Definition mgl_event_register_list.cc:61
RegisterList() noexcept
コンストラクタ
Definition mgl_event_register_list.cc:22
bool Register(STL::unique_ptr< RegisterItem > item) noexcept
リストに登録
Definition mgl_event_register_list.cc:36
bool Execute(void *notifyArg) noexcept
登録済みのイベントを実行
Definition mgl_event_register_list.cc:105
MGL イベントハンドル
MGL イベント 型定義
NotifyType
通知タイプ
Definition mgl_event_types.h:21
void(*)(void *callbackArg, void *notifyArg) CallbackFunction
イベントコールバック関数
Definition mgl_event_types.h:68
uintptr_t UniqueID
イベント通知のユニークID型
Definition mgl_event_types.h:65
MGL STLコンテナの代替
std::list< T, Allocator< T > > list
std::listの代替
Definition mgl_stl_containers.h:47
MGL STLのメモリ関連の代替
std::unique_ptr< T, Deleter > unique_ptr
MGLのアロケータを利用するユニークポインタ
Definition mgl_stl_memory.h:247
登録アイテム
Definition mgl_event_register_list.h:27
CallbackFunction callback
コールバック関数
Definition mgl_event_register_list.h:30
NotifyType type
通知タイプ
Definition mgl_event_register_list.h:29
void * callbackArg
コールバック関数に渡す引数
Definition mgl_event_register_list.h:31