adapt to scheduler rework
This commit is contained in:
@ -10,9 +10,9 @@ private:
|
||||
char lastChar = '\0';
|
||||
|
||||
public:
|
||||
Thread& thread; // Thread which contains this listener, so the listener can block the thread
|
||||
unsigned int tid; // Thread which contains this listener, so the listener can block the thread
|
||||
|
||||
KeyEventListener(Thread& thread) : thread(thread) {}
|
||||
KeyEventListener(unsigned int tid) : tid(tid) {}
|
||||
|
||||
char waitForKeyEvent() const; // Blocks the thread until woken up by manager
|
||||
void trigger(char c); // Gets called from KeyEventManager
|
||||
|
||||
@ -1,21 +1,26 @@
|
||||
#include "user/event/KeyEventManager.h"
|
||||
#include "kernel/Globals.h"
|
||||
|
||||
void KeyEventManager::subscribe(KeyEventListener& listener) {
|
||||
log << DEBUG << "Subscribe, Thread ID: " << dec << listener.thread.tid << endl;
|
||||
this->listeners.insert_last(&listener);
|
||||
void KeyEventManager::subscribe(KeyEventListener& sub) {
|
||||
log << DEBUG << "Subscribe, Thread ID: " << dec << sub.tid << endl;
|
||||
this->listeners.push_back(&sub);
|
||||
}
|
||||
|
||||
void KeyEventManager::unsubscribe(KeyEventListener& listener) {
|
||||
log << DEBUG << "Unsubscribe, Thread ID: " << dec << listener.thread.tid << endl;
|
||||
this->listeners.remove(&listener);
|
||||
void KeyEventManager::unsubscribe(KeyEventListener& unsub) {
|
||||
log << DEBUG << "Unsubscribe, Thread ID: " << dec << unsub.tid << endl;
|
||||
for (bse::Vector<KeyEventListener*>::Iterator it = listeners.begin(); it != listeners.end(); ++it) {
|
||||
if ((*it)->tid == unsub.tid) {
|
||||
this->listeners.erase(it);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KeyEventManager::broadcast(char c) {
|
||||
log << TRACE << "Beginning Broadcast" << endl;
|
||||
for (KeyEventListener* listener : this->listeners) {
|
||||
log << TRACE << "Broadcasting " << c << " to Thread ID: " << dec << listener->thread.tid << endl;
|
||||
log << TRACE << "Broadcasting " << c << " to Thread ID: " << dec << listener->tid << endl;
|
||||
listener->trigger(c);
|
||||
scheduler.deblock(&listener->thread);
|
||||
scheduler.deblock(listener->tid);
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,8 +18,8 @@ private:
|
||||
public:
|
||||
KeyEventManager() : log("KEvMan") {}
|
||||
|
||||
void subscribe(KeyEventListener& listener);
|
||||
void unsubscribe(KeyEventListener& listener);
|
||||
void subscribe(KeyEventListener& sub);
|
||||
void unsubscribe(KeyEventListener& unsub);
|
||||
void broadcast(char c); // Unblocks all input waiting threads, I don't have a method to direct input
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user