如何从线程发出信号和单独的函数可以连接到信号?

时间:2013-06-11 06:04:44

标签: c++

我想在打印“Hello”后创建一个线程并从那里发出信号。想要连接正常功能或打印“世界”的其他线程的信号。如何在Windows c ++中做到这一点?基本上是信号/插槽通信的新手。

1 个答案:

答案 0 :(得分:3)

有两个完全不同的问题:

  1. 用C ++和
  2. 实现信号
  3. 在另一个线程中调用函数
  4. 上次我和他们混在一起后,我后悔了。绝对建议单独解决;无论如何,大多数信号处理程序可能都是同步的。

    信号

    • C ++ 11引入了类型擦除的委托std::function,它可以用作委托,为信号创建它们的集合并不是那么多工作。处理来自单独线程的连接/断开连接需要更多工作,因为自动断开对象销毁。 Boost为C ++ 03环境提供了兼容的实现。
    • Boost提供信号和signals2库。前者不处理与单独线程的断开连接,因此您可能需要更晚的。
    • 有一个小的独立库libsigc++
    • Qt包含精心设计的信号和插槽机制,不幸的是有些非C ++(它来自古代,当时C ++并不比带有类的C语言多得多)。

    在单独的线程中调用函数

    线程完全控制它执行的内容。因此,如果您想在另一个线程中执行某些操作,则需要在其中运行事件循环。由于您通常只能运行一个事件循环,因此您必须使用GUI库附带的那个(除了从线程处理GUI完成某些事情之外,没有太多理由想要在不同的线程中运行某些GUI库作为大多数GUI库是不是线程安全的。)

    Qt允许您指定在连接信号时运行处理程序的线程。在其他框架中,您可能必须向事件循环发送一些消息。您可以使用std::function指定要执行的内容。