Message queue

I have a GUI class and a logic class.
The GUI class displays the messages that the logic class creates.

What’s the best way to implement this?

Currently I have a singleton class called MessageQ which can push and pop messages. It has FIFO access.
The only time messages are sent to the UI is at the end of every frame; after the logic is finished.
While the logic is executing the MessageQ is having messages pushed into it.

Is there a better way?