diff options
Diffstat (limited to 'lib/element_impl.hpp')
-rw-r--r-- | lib/element_impl.hpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/element_impl.hpp b/lib/element_impl.hpp index 3148d93..727e756 100644 --- a/lib/element_impl.hpp +++ b/lib/element_impl.hpp @@ -51,12 +51,20 @@ struct ElementImpl return topology.get(); } - //call this before sending a high prio message to all workers - void pre_post_all_set_prio(void) + template <typename MessageType> + void bcast_prio_msg(const MessageType &msg) { + Theron::Receiver receiver; BOOST_FOREACH(Apology::Worker *worker, this->executor->get_workers()) { - dynamic_cast<BlockActor *>(worker)->highPrioPreNotify(); + MessageType message = msg; + message.prio_token = dynamic_cast<BlockActor *>(worker)->prio_token; + worker->Push(message, receiver.GetAddress()); + } + size_t outstandingCount(this->executor->get_workers().size()); + while (outstandingCount != 0) + { + outstandingCount -= receiver.Wait(outstandingCount); } } |