我在多线程程序中有一个永远运行的事件循环,很多函数和方法都会将消息推送到这个事件循环。简化版:
class EventLoop {
public:
void run();
private:
std::deque<std::string> m_msg_queue;
std::condition_variable m_q_cv;
std::mutex m_q_mtx;
};
void EventLoop::run() {
while(true) {
//use m_q_cv to wait for data in m_msg_queue and dispatch
}
}
int main() {
EventLoop el;
el.run();
return 0;
}
这种方法是否正确?如果是这样,除了 main() 之外,在其他函数/方法中排队事件的最佳方法是什么?
我不喜欢在其他 .cpp 文件中执行 extern Event el
...
最佳答案
定义一个契约(Contract),用于将消息发布或发送到事件循环中并对接收到的事件使用react。典型的 API 至少会公开发送/发布过程对以及某种消息契约和连接回调的机制。然后公开这个合约而不是你的实现,它可能隐藏在库中。
关于c++ - 如何从无法直接访问的地方将消息/事件推送到消息队列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16679707/