Hallo,
Ik wil graag in c++ een soort eventlistener, (zie java actionlistener bijv) maken. Dus dat verschillende objecten events kunnen sturen naar het listener object.
Nou zit ik een beetje met het probleem dat ik niet goed weet hoe ik dit moet ontwerpen. Ik heb nu alle dingen die events kunnen veroorzaken in aparte threads (van de pthreads lib) gestopt, zodat het listener object gewoon door kan blijven listenen. Maar ik zit een beetje met het wachten op events. Ik kan wel een busy-wait maken, maar erg netjes is dit niet. Met Sleep kan het ook, maar zan dit je meteen weer aan windows vast en dat wil ik ook niet.
Wat ik nu heb lijkt ene beetje op de windows message queue, alleen vreetie met busy waiting wel 100% processor tijd en dat wil ik eigenlijk niet
Ik heb wel op google gezocht, maar het is erg lastig om zoiets te vinden (kom wel HEEL veel java stuff tegen, maar daar heb ik niet zoveel aan)
Is er een soort standaard oplossing voor dit probleem? OF heeft iemand goeie tips?
Ik wil graag in c++ een soort eventlistener, (zie java actionlistener bijv) maken. Dus dat verschillende objecten events kunnen sturen naar het listener object.
Nou zit ik een beetje met het probleem dat ik niet goed weet hoe ik dit moet ontwerpen. Ik heb nu alle dingen die events kunnen veroorzaken in aparte threads (van de pthreads lib) gestopt, zodat het listener object gewoon door kan blijven listenen. Maar ik zit een beetje met het wachten op events. Ik kan wel een busy-wait maken, maar erg netjes is dit niet. Met Sleep kan het ook, maar zan dit je meteen weer aan windows vast en dat wil ik ook niet.
Wat ik nu heb lijkt ene beetje op de windows message queue, alleen vreetie met busy waiting wel 100% processor tijd en dat wil ik eigenlijk niet
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| class Listener { public: processEvent(Event const & e); startListening(); } Listener::processEvent(Event const & e) { //doe iets met het event; } Listener::startListening() { buttoninputthread.setListener(this); //beetje pseudo code :) while(42) // ;) {} } |
Ik heb wel op google gezocht, maar het is erg lastig om zoiets te vinden (kom wel HEEL veel java stuff tegen, maar daar heb ik niet zoveel aan)
Is er een soort standaard oplossing voor dit probleem? OF heeft iemand goeie tips?