c++ - 如何从无法直接访问的地方将消息/事件推送到消息队列中?

标签 c++ event-loop

我在多线程程序中有一个永远运行的事件循环,很多函数和方法都会将消息推送到这个事件循环。简化版:

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/

相关文章:

c# - 将位图从 C# 传递到 C++

c++ - 从指针获取迭代器

c++ - 等待事件循环为空/等到 Qt5 小部件关闭

python - 何时使用多个事件循环?

multithreading - 在 QThread.exit() 上立即停止处理事件队列

ios - AudioKit 音序器时钟

c++ - 二维数组与结构 (C++)

c++ - 时间未被计算

C++ const_iterator to iterator for forward_list

javascript - Node.js:console.err() 是同步还是异步?