Чтобы упростить вопрос, скажем, у меня есть QTimer
, который будет вызывать событие тайм-аута каждые 3000 мс.
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, [&](){
// do sth(rely on a public data structure)
});
timer.start(3000);
Операция внутри лямбды, подключенной к событию timeout
, полагаетсяв публичной структуре данных.
И приложение удерживает QUdpSocket
и соединяет сигнал readyRead
с функцией слота.
QUdpSocket socket;
socket.bind(45454, QUdpSocket::ReuseAddressHint);
QObject::connect(&socket, &QUdpSocket::readyRead, [&](){
//manipulate the public data structure
}
Как видите, лямбда подключенак сигналу readyRead
манипулировать структурой общедоступных данных, на которую опирается первая лямбда.
Поэтому мой вопрос: я хочу, чтобы функция, подключенная к сигналу readyRead
, имела самый высокий «приоритет», то естьдаже в цикле обработки событий Qt теперь работает со слотом timeout
, его можно прервать и сразу запустить слот readyRead
, а затем, после его завершения, возобновить функцию слота timeout
.Есть ли способ сделать это?
(Моя домашняя работа состоит в том, чтобы смоделировать проблему открытого / скрытого узла IEEE802.11, она требует, чтобы я постоянно прослушивал канал до / во время отправки пакета.)
(явно вызов QCoreApplication::processEvent
поможет?)