我正在尝试创建一个具有定时任务的实时数据收集应用程序。每个任务可以具有不同或相同的更新周期。我想将具有公共更新周期的任务存储在列表中,我可以遍历它并调用我在列表中注册的函数。我如何将回调添加到像列表或向量这样的数据结构?我可以在其中存储插槽吗?
答案 0 :(得分:2)
您可以将boost :: function形式的回调函数添加到数据结构中,例如list或vector。
但是,如果您有定时任务并希望这些任务以特定间隔重复,您只需存储QTimer列表
QList<QTimer> timed_tasks;
在您的设置中,您将正确的计时器连接到正确的插槽功能。然后开始你的Qt事件循环。
如果您正在运行非常紧凑的收集程序(即许多长任务但需要实时执行),则应将插槽功能放在不同的线程上。这样你的主事件循环仍然可以运行(并触发任务)。否则,花费太长时间的任务会使其他任务匮乏,因为事件循环没有及时返回以触发其他任务。
您还可以使用QRunnable实现这些任务,并提供将运行它们的QThreadPool。如果您要走这条路,我建议您查看http://doc.qt.io/archives/4.6/threads.html。
更新:上面建议的解决方案将处理同时触发的多个计时器。为了让用户可以控制要触发的计时器(即要收集哪个值),可以使用QObject :: killTimer和QObject :: startTimer。这不需要任何额外的存储空间用于位表或某些其他机制来存储当前活动的定时器。