Qt5: Как дождаться сигнала (с фильтром) в потоке?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Qt5: Как дождаться сигнала (с фильтром) в потоке?

Сообщение Anonymous »


Я прочитал пост о том, как дождаться сигнала в потоке, но все еще не понимаю:

Что, если я хочу дождаться сигнала с аргументами и отфильтровать входящие сигналы на основе каких-то конкретных условий?
Предположим, у нас есть signal: Trigged(int i)

Таймер QTimer; timer.setSingleShot(истина); цикл QEventLoop; Connect( this, &MyClass::triggered, &loop, [&](int i) { // только 123 остановит цикл событий, в противном случае продолжайте ждать до истечения времени ожидания если (я == 123) цикл.Выход(); }); Connect( &timer, &QTimer::timeout, &loop, &QEventLoop::quit ); timer.start(msTimeout); цикл.exec(); если (timer.isActive()) qDebug("Получено 123! Оно не может быть передано первым входящим сигналом."); еще qDebug("Тайм-аут"); Вопросы:
[*]Для первого connect, который подключен к лямбде, необходим ли третий аргумент &loop? [*]При первом подключении нужно ли где-нибудь его отключить? [*]Я видел в некоторых комментариях, что внутренний QEventLoop следует использовать очень осторожно, почему? Правильно ли я это делаю? [*]Может ли класс QSignalSpy добиться этого? [*]Можно ли переписать это в многоразовый шаблон заголовка? например, waitForTimeout(отправитель QObject*, сигнал Func1, предикат Func2, целое число мсек)
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»