This is kind of wasteful.
Or you can put in an observer-relationship. You create an observer object list in your queue and make assignments of who's watching it. Once a message is received, you update all the observers with the message.

The way to do this is to run a thread that handles updating the observers. The thread itself waits for a semaphore linked to the queue. Every time, you enqueue a new message, you increment (release) the semaphore.

As a bonus, if you're going to run a thread specific to the queue, create a static "runThread" method in the class that takes the object pointer (this) as it's parameter. This will save you a few hours of headaches.