Мое принятие желаемого за действительное - то, что, если программное обеспечение создается государственными служащими или заказным программным обеспечением, созданным для правительства подрядчиком, это должно быть автоматически в общественном достоянии (как опубликованные документы всего правительства). Если бы правительство купило программное обеспечение у компании, даже если бы это включало некоторую настройку, это должно остаться закрытым исходным кодом. Вы сталкиваетесь с чем-то вроде серой области, где она была разработана подрядчиками для правительства, но могла тогда быть продана в качестве коммерческого продукта (если кто-либо был достаточно глуп купить программное обеспечение, созданное для правительства... посмотрите The Daily WTF для ссылок)... Я не знаю, как разрешить, что, но несмотря на мое требование FOSS, я думаю, что он лучше всего допускает ошибку на стороне бизнеса в этом случае.
я также думаю, что правительство должно быть обязано использовать существующее программное обеспечение с открытым исходным кодом, если это - жизнеспособный конкурент решения с закрытым исходным кодом. Это сохранило бы некоторые налоговые поступления и способствовало бы правительственной открытости (не в смысле программного обеспечения, хотя это будет хорошо также).
, Как мы заставляем его произойти?: D
Это зависит от обстоятельств. Из документации :
Когда выдается сигнал, подключенные к нему слоты обычно выполняются немедленно, как при обычном вызове функции. Когда это происходит, механизм сигналов и слотов полностью независим от любого цикла событий графического интерфейса. Выполнение кода, следующего за оператором
emit
, произойдет после возврата всех слотов. Ситуация немного иная при использовании соединений в очереди ; в таком случае код, следующий за ключевым словом emit, будет продолжен немедленно, а слоты будут выполнены позже.
Таким образом, в обычных случаях он будет синхронным и блокирующим, а с подключениями в очереди он будет асинхронным и неблокирующим .
Ответ Лаалто выше правильный. Еще один момент: если все ваши объекты QObject принадлежат одному потоку и вы не указали вручную соединения в очереди, то выполнение слотов, подключенных к сигналу, происходит синхронно - вся обработка будет выполняться до следующей строки после 'emit ' заявление. Поскольку это наиболее распространенный случай, ответ на ваш вопрос обычно «да».
Вам может быть полезна документация по сигналам и слотам для нескольких потоков .
Самая большая проблема в том, что вы просто не можете знать. То есть, если смотреть с точки зрения класса. Когда вы испускаете, вы не знаете, что произойдет:
Еще труднее узнать, что произойдет, если к сигналу подключены несколько объектов. В этом случае некоторые слоты могли работать, а другие все еще находятся в очереди. Между прочим, нет потока, связанного с неблокирующим соединением. В цикле событий потока принимающего объекта отправляется только событие.