Поведение слотов QThread

Я новичок в C++ и Qt, и мне интересно, что произойдет, если я отправлю signal в object1, работающем в thread1, другому object2, работающему в другом thread2, а object2 запустит бесконечный цикл для обработки? Будет ли slot в object2 никогда не вызываться, так как thread2 занят выполнением цикла?


person Michel Feinstein    schedule 29.12.2013    source источник


Ответы (1)


Я новичок в C++ и Qt, и мне интересно, что произойдет, если я испущу сигнал в объекте 1, работающем в потоке 1, на другой объект 2, работающий в другом потоке 2, а объект 2 выполняет бесконечный цикл для обработки? Будет ли слот в object2 никогда не вызываться, так как thread2 занят выполнением цикла?

И да и нет.

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

Однако вы можете создать цикл событий, который время от времени обрабатывает поступающие события, и тогда он будет работать так, как вы ожидаете.

Мое более подробное объяснение доступно здесь для людей, которые хотели бы получить более подробную информацию по теме.

person lpapp    schedule 29.12.2013
comment
Просто отметим, что обработка событий вручную работает не так хорошо и не так эффективно, как просто не мешать циклу обработки событий. - person John Chadwick; 30.12.2013
comment
@JohnChadwick: я не уверен, что вы имеете в виду. - person lpapp; 30.12.2013