I think what you want may be called an 'Event us'.
You have a queue (Bus) of elements of type Event (Event is the type you define to contain the data).
The thread is locked in the call to 'pop()'
Anytime you want to send more data you just push a new element into the queue
The thread gets unlocked and gets the new data
Of course you may want to try another if more than one thread are allowed to handle the same event, but that won't be difficult if the first steps are understood.
I invite you to take a look to
this for an implementation of a thread-safe queue
Pseudo-code:
void thread_handler() {
while (true) {
Event e = queue_.pop();
// do somehting with e
}
}
void trigger() {
Event e (data1, data2, data3)
queue_.push(e);
}