Список обратных вызовов Qt - PullRequest
0 голосов
/ 15 января 2011

Я пытаюсь создать приложение для сбора данных в режиме реального времени, у которого есть временная задача. Каждая задача может иметь разные или одинаковые периоды обновления. Я хотел бы сохранить задачу с общим периодом обновления в списке, где я могу выполнить итерацию по ней и вызвать функцию, которую я зарегистрировал в списке. Как бы я хотел добавить обратные вызовы в структуру данных, такую ​​как список или вектор? Могу ли я хранить в них слоты?

1 Ответ

2 голосов
/ 15 января 2011

Вы можете добавить функции обратного вызова в виде boost :: function в структуру данных, такую ​​как список или вектор.

Однако, если у вас есть синхронизированные задачи и вы хотите, чтобы эти задачи повторялись через определенные интервалы, вы можете просто сохранить список QTimer

QList<QTimer> timed_tasks;

В вашей настройке вы подключите правильный таймер к правильным функциям слота.Затем запустите цикл обработки событий Qt.

Если вы используете очень трудную программу сбора (т.е. много длинных задач, но должны выполняться в режиме реального времени), у вас должны быть функции слотов в отдельных потоках.Таким образом, ваш главный цикл обработки событий все еще может работать (и запускать задачи).В противном случае задачи, которые занимают слишком много времени, будут вызывать голодание других задач, поскольку цикл обработки событий не возвращается вовремя, чтобы запустить другие задачи.

Вы также можете реализовать эти задачи с помощью QRunnable и предоставить QThreadPool, который будетзапустить их.Я предлагаю вам проверить http://doc.qt.io/archives/4.6/threads.html, если вы идете по этому пути.

ОБНОВЛЕНИЕ: Решение, предлагаемое выше, будет работать с несколькими таймерами, которые срабатывают одновременно.Чтобы дать пользователю контроль над тем, какой таймер срабатывать (т.е. какое значение собирать), вы можете использовать QObject :: killTimer и QObject :: startTimer.Это не требует дополнительного места для хранения битовых таблиц или какого-либо другого механизма для хранения таймера, который активен в данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...