Skip to content

Commit 73968f0

Browse files
committed
- Added EventThreadWithLoop
1 parent 1d81007 commit 73968f0

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

src/ESPressio_EventThread.hpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
#pragma once
22

3+
#include <ESPressio_Thread.hpp>
4+
35
#include <ESPressio_EventThreadBase.hpp>
46
#include "ESPressio_EventListener.hpp"
57
#include "ESPressio_EventManager.hpp"
68

9+
using namespace ESPressio::Threads;
10+
711
namespace ESPressio {
812

913
namespace Event {
@@ -35,6 +39,44 @@ namespace ESPressio {
3539
}
3640
};
3741

42+
enum EventThreadProcessOrder {
43+
EventsBeforeLoop,
44+
EventsAfterLoop
45+
};
46+
47+
class EventThreadWithLoop : public Thread, public EventReceiver, public IEventThreadBase, public EventListener, public IEventThread {
48+
private:
49+
EventThreadProcessOrder _processOrder = EventThreadProcessOrder::EventsBeforeLoop;
50+
protected:
51+
void OnLoop() override {
52+
if (_processOrder == EventThreadProcessOrder::EventsBeforeLoop) {
53+
WithEvents([&](IEvent* event, EventDispatchMethod dispatchMethod, EventPriority priority) {
54+
ProcessEvent(event, dispatchMethod, priority);
55+
});
56+
}
57+
58+
OnThreadLoop();
59+
60+
if (_processOrder == EventThreadProcessOrder::EventsAfterLoop) {
61+
WithEvents([&](IEvent* event, EventDispatchMethod dispatchMethod, EventPriority priority) {
62+
ProcessEvent(event, dispatchMethod, priority);
63+
});
64+
}
65+
}
66+
67+
virtual void OnThreadLoop() = 0;
68+
public:
69+
EventThreadBase(bool freeOnTerminate) : Thread(freeOnTerminate) { }
70+
71+
virtual ~EventThreadBase() {
72+
73+
}
74+
75+
EventThreadProcessOrder GetProcessOrder() { return _processOrder; }
76+
77+
void SetProcessOrder(EventThreadProcessOrder processOrder) { _processOrder = processOrder; }
78+
};
79+
3880
}
3981

4082
}

0 commit comments

Comments
 (0)