16#include <ifw/core/utils/base/base.hpp>
17#include <ifw/core/utils/time/time.hpp>
36 m_count_mutex.lock(); {
38 } m_count_mutex.unlock();
42 m_acquire_mutex.lock(); {
44 while (m_count == 0) {
45 ifw::core::utils::time::Sleep(0.0001);
48 m_count_mutex.lock(); {
50 } m_count_mutex.unlock();
52 } m_acquire_mutex.unlock();
56 m_acquire_mutex.lock(); {
58 double start_time = ifw::core::utils::time::Time();
59 while ((m_count == 0) && ((ifw::core::utils::time::Time() - start_time) < time)) {
60 ifw::core::utils::time::Sleep(0.0001);
62 if ((ifw::core::utils::time::Time() - start_time) >= time) {
63 m_acquire_mutex.unlock();
67 m_count_mutex.lock(); {
69 } m_count_mutex.unlock();
71 } m_acquire_mutex.unlock();
77 std::mutex m_acquire_mutex;
78 std::mutex m_count_mutex;
120 const double timeout,
130 const double timeout,
137 const double timeout,
148 std::map<std::string, std::list<Message>> m_message_registry;
151 std::map<std::string, TmpCountingSem*> m_message_registry_sem;
154 std::map<std::string, std::list<Response>> m_response_registry;
157 std::map<std::string, TmpCountingSem*> m_response_registry_sem;
160 std::map<std::string, Response*> m_response_msg_id_registry;
162 std::vector<std::string> m_threads;
TmpCountingSem()
Definition messageBus.hpp:27
void release()
Definition messageBus.hpp:35
bool try_acquire_for(const double time)
Definition messageBus.hpp:55
~TmpCountingSem()
Definition messageBus.hpp:31
void acquire()
Definition messageBus.hpp:41
std::string ToString() const
Generate ASCII output providing a status of the object (to the extend possible).
void SendMessage(const Message &message)
Send a message on the Message Bus.
Definition messageBus.cpp:83
MessageBus()
Definition messageBus.cpp:28
bool ThreadRegistered(const std::string &thread_name) const
Check if thread has been registered as participant in the Message Bus instance.
Definition messageBus.cpp:57
~MessageBus()
Definition messageBus.cpp:36
void Reset()
Reset the internal message queues and other objects.
Definition messageBus.cpp:46
MessageBus & RegisterThread(const std::string &thread_name)
Register thread which will send/receive messages on the Message Bus.
Definition messageBus.cpp:65
bool ReceiveMessage(const std::string &receiver_thread_name, const double timeout, bool &timed_out, Message &message)
Check for a message for this thread. Returns true if message available.
Definition messageBus.cpp:101
bool ReceiveResponseByMsgId(const std::string &msg_id, const double timeout, bool &timed_out, Response &response)
Check for a message for this thread. Returns true if message available.
Definition messageBus.cpp:213
void SendResponse(Response &response)
Send a response to a message received on the Message Bus.
Definition messageBus.cpp:150
bool ReceiveResponse(const std::string &msg_sender_thread_name, const double timeout, bool &timed_out, Response &response)
Check for a message for this thread. Returns true if message available.
Definition messageBus.cpp:163
IFW CTD Multiprocessing Toolkit Message class.
Definition message.hpp:25
IFW CTD Multiprocessing Toolkit Response class.
Definition response.hpp:21
void SplitDblTime(const double time, int64_t &secs, int64_t &nano_secs)
Definition messageBus.cpp:21