Ik ben bezig met een library, en het is de bedoeling dat deze een eenvoudige interface krijgt. De library bevat een functie om opdrachten aan te leveren. Die opdrachten worden vervolgens in een std::queue geplaatst, en de functie 'returnt'. Een tweede thread checkt om de zoveel tijd die queue, en verwerkt de opdrachten (als die er zijn). Dit is niet zo'n probleem: de applicatie zal toch het grootste deel van de tijd bezig zijn met opdrachten verwerken.
Nu het probleem: stel dat een opdracht verwerkt is, hoe koppel ik de resultaten hiervan terug naar de applicatie? Ik kan volgens mij het volgende doen:
Nu het probleem: stel dat een opdracht verwerkt is, hoe koppel ik de resultaten hiervan terug naar de applicatie? Ik kan volgens mij het volgende doen:
- Callbacks: dit vind ik opzich een nette oplossing, en is in C++ eenvoudig te doen met functie pointers. Maar omdat ik twee threads gebruik word de callback op de verwerk-thread uitgevoerd. Ik ben bang dat ik hiermee het probleem teveel opschuif naar de externe applicatie (die moet zich dan gaan bezighouden met locking, threadsafety, etc.). Dat doe ik liever eenmalig zelf
- [br]
- Pollen: ik kan de resultaten ook in een queue zetten, en de library een functie geven die alle resultaten teruggeeft als die er zijn. De applicatie kan deze functie dan zo nu en dan aanroepen. Het nadeel hiervan is dat de applicatie telkens moet pollen (niet efficient, en niet heel handig voor de ontwikkelaar van de externe applicatie), en dat er mogelijk net nadat er gepollt is opeens wat beschikbaar komt, waardoor de applicatie dit dus later weet dan nodig (geen groot probleem, maar ik vind het gewoon niet zo netjes).