gpt4 book ai didi

c++ - 调用在主线程上工作的方法

转载 作者:搜寻专家 更新时间:2023-10-31 00:44:18 25 4
gpt4 key购买 nike

我有两个不同的线程。第一个是必须处理 gui 操作的主线程。第二个是一个网络线程,它监听相关的 tcp 端口。我需要网络线程以它们将在主线程中运行的方式调用方法。如何在不使用消息队列机制的情况下实现这一点?

最佳答案

在你的情况下我会怎么做是告诉另一个线程在它的事件队列上安排一个函数。该函数的参数与发送的函数绑定(bind)。

例如在网络代码中:

int result = doWork();
otherThreadsEventLoop.scheduleFunction(drawResult,result);

所有 GUI 框架和大多数网络框架都允许您这样做。

  • 如果您使用的是 qt,那么您将使用 QMetaObject::invokeMethod。
  • 如果您使用的是 gtk,那么您将使用 q_idle_add。
  • 如果您使用的是 boost::asio,那么您将使用 io_service.post。
  • 如果您使用的是 libevent,那么您将使用 event_base_once。

一个问题可能是为仅提供 C 回调的库绑定(bind)附加参数。我的建议是编写一个“包装器”函数,允许您将 std::functions 传递到回调中。

关于c++ - 调用在主线程上工作的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com