2013-04-24 4 views
8

У меня есть два сигнала A и B, излучаемые один за другим с объекта в потоке X, а два связанных слота находятся в основном потоке. Соединение - QueuedConnection (из-за многопоточного соединения). Мой вопрос: порядок сигналов, соблюдаемых при их вызове слотам, или есть шанс, что они будут выполнены в произвольном порядке?Порядок выполнения сигнала с Qt :: QueuedConnection

+0

Я всегда думал, что они выполнены в порядке эмиссии, потому что они будут добавлены как события в очереди событий, поскольку они испускаются с одинаковым приоритетом (потому что по каким критериям он изменит приоритет?). Однако я не могу найти какие-либо документы, чтобы подтвердить это, и я не посмотрел в исходном коде ... – cmannett85

ответ

6

Оба ваших сигнала будут поставлены в очередь в одной очереди событий X-потока, поэтому соответствующие интервалы будут выполняться в порядке поступления сигналов.

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

signal A connected to a slot in X thread 
signal B connected to a slot in Y thread 

Кроме того, существует тип Qt::BlockingQueuedConnection соединение. Если вы подключите свой первый сигнал к нему, ваш текущий поток будет заблокирован, пока соответствующий слот в другом потоке не завершит работу.

5

В соответствии с текущими источниками QT (5. *) они будут отправляться в последовательности, в которой они испускались с использованием алгоритма FIFO. Но, как указано в комментарии, в документации нет ничего, что определяет этот порядок, поэтому я бы не предложил ретранслировать на это поведение.

Смежные вопросы