繁体   English   中英

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

[英]How to emit signal from a thread and a seperate function can connect to the signal?

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

有两个完全独立的问题:

  1. 在C ++和
  2. 在另一个线程中调用函数

上次我将它们混合在一起后悔。 绝对建议单独解决; 无论如何,大多数信号处理程序都可能是同步的。

信号

  • C ++ 11引入了类型擦除的委托std::function ,可以将其用作委托,为信号创建它们的集合不是很多工作。 尽管在对象破坏时自动断开连接,但是处理来自单独线程的连接/断开连接还需要更多的工作。 Boost为C ++ 03环境提供了兼容的实现。
  • Boost提供信号和signal2库。 前者不能处理与单独线程的断开连接,因此您可能需要后者。
  • 有一个单独的小库libsigc ++
  • Qt包含复杂的信号和时隙机制,不幸的是,它不是C ++的一种(它来自远古时代,C ++仅比带有类的C多)。

在单独的线程中调用函数

线程完全可以控制其执行的内容。 因此,如果要在另一个线程中执行某些操作,则需要在那里运行一个事件循环。 由于您通常只能运行一个事件循环,因此您必须使用GUI库附带的事件循环(除了从大多数处理GUI的线程中处理GUI之外,无需在其他线程中运行某些东西的原因就不多了。 不是线程安全的)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM