c++ - Qt 回调列表

标签 c++ qt callback

我正在尝试制作一个具有定时任务的实时数据收集应用程序。每个任务可以有不同或相同的更新周期。我想将具有公共(public)更新周期的任务存储在一个列表中,我可以在其中迭代它并调用我在列表中注册的函数。我将如何着手向列表或 vector 等数据结构添加回调?我可以在其中存储插槽吗?

最佳答案

您可以将 boost::function 形式的回调函数添加到列表或 vector 等数据结构中。

但是,如果您有定时任务并且希望这些任务以特定的时间间隔重复,您可以简单地存储一个 QTimer 列表

QList<QTimer> timed_tasks;

在您的设置中,您会将正确的计时器连接到正确的槽函数。然后启动您的 Qt 事件循环。

如果您正在运行一个非常紧凑的收集程序(即许多长任务但需要实时执行),您应该在单独的线程上使用槽函数。这样你的主事件循环仍然可以运行(并触发任务)。否则,耗时太长的任务会使其他任务饿死,因为事件循环不会及时返回以触发其他到期任务。

您还可以根据 QRunnable 实现这些任务,并提供将运行它们的 QThreadPool。我建议你查看http://doc.qt.io/archives/4.6/threads.html如果你正沿着这条路走下去。

更新:上面建议的解决方案将处理同时触发的多个计时器。为了让用户控制触发哪个计时器(即收集哪个值),您可以使用 QObject::killTimer 和 QObject::startTimer。这不需要任何额外的位表存储空间或一些其他机制来存储哪个定时器当前处于事件状态。

关于c++ - Qt 回调列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4697813/

相关文章:

c++ - 在 C++ 中删除时间数组

c++ - 唯一 ptr 初始化断言失败

javascript - 如何使用requirejs递归加载目录?

callback - 如何 : Idiomatic Rust for callbacks with gtk (rust-gnome)

C++ 非静态数据成员初始化器,只是有点困惑

c++ - 在 C++ 中解析无效的 XML

c++ - QML ListView 和段错误

qt - 如何使 QPushButtons 将文本添加到 QLineEdit 框中?

c++ - Qt - 编译错误 : Couldn't change working directory

iphone - AUMixer之后的RemoteIO回调