2014-09-11 5 views
4

При перемещении объекта из одного потока в другой, moveToThread() автоматически переписывает существующие прямые подключения к очереди в очереди?Передает ли moveToThread() переписывание прямых подключений к очереди в очереди?

Или другими словами: имеет ли значение, если автоматические соединения установлены до или после вызова moveToThread()?

К сожалению, ни на документацию, ни на WWW не было ответа на этот вопрос.

+0

Я проверил неправильные детали. Я сфокусировал moveToThread() и connect() и пропустил проверку документации перечисления типа соединения, потому что я, конечно же, не ожидал, что тип соединения будет проверяться на выброс сигнала. – Silicomancer

+2

Вы можете увидеть его в [исходном коде] (https://qt.gitorious.org/qt/qtbase/source/9754e5a03e4444a18ec7ca1525d196326ff4e038:src/corelib/kernel/qobject.cpp#L3516), если вам интересно. – thuga

+1

Тип подключения * должен быть проверен при выделении сигнала, так как сигналы могут быть испускаемы, без резьбы, из * в любом месте *. Даже из чужих нитей. Это стандартная идиома для выдачи сигнала от обратного вызова из библиотеки C, например. Автоматический тип соединения был бы невозможным без такой проверки времени эмиссии. Хотя * слот * связан с контекстом потока объекта, сигнал отсутствует - он просто связан с списком соединений отправляющего объекта. –

ответ

5

Согласно Qt documentation: Если приемник находится в потоке, который испускает сигнал, используется Qt :: DirectConnection. В противном случае используется Qt :: QueuedConnection. Тип подключения определяется при испускании сигнала.

+0

Черт, я пропустил это предложение! И я узнал что-то очень важное ... Я всегда думал, что фактический тип соединения определяется при установлении соединения. – Silicomancer

4

Не все прямые соединения остаются прямыми, и все очереди в очереди остаются в очереди.

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