Используйте Повышение. Сигнал вместо сигналов QT? Обойтись без MOC?

Я знаю, что они могут использоваться вместе, но я задаюсь вопросом, возможно ли заменить механизм сигналов и слотов QT Повышением. Сигнал в спокойных частях программы (виджеты и такой).

Кто-либо когда-нибудь пробует его? Какие-либо глюки?

Принятие я не использую никакие другие функции MOC и заменяю сигналы/слоты boost.signal, действительно ли возможно обойтись без MOC полностью?

14
задан drby 19 January 2010 в 10:11
поделиться

2 ответа

Это действительно неясно, я никогда не видел атрибут «многопоточности» в MIDL. Также нет авторов библиотеки MSDN .

Coclass COM публикует свои требования к многопоточности в реестре с помощью ключа HKCR\CLSID\{ guid }\InProcServer32 . Значение ThreadingModel объявляет квартиру, в которой она нуждается. Если он отсутствует или установлен в «Квартира», то объявляет, что не является потоковой безопасностью и требует помощи от потока STA. CoCreateInstance () использует это значение при создании объекта. При необходимости он запустит поток STA и создаст прокси, если текущий поток не является STA, гарантируя, что он всегда будет использоваться безопасным для потока способом.

Класс [ComVisible] .NET будет зарегистрирован как «Both», что указывает на то, что его можно использовать в потоке в MTA. Довольно оптимистично, но следует философии .NET, что все небезопасно, но может быть сделано безопасным, поставив ключевое слово lock в нужные места. Обещание, которое не часто тестируется btw, рискованное. Переопределение значения ThreadingModel (или его исключение) требует написания кода для самостоятельной регистрации coclass с атрибутом [ComRegisterFunction]. RegistrationServices.RegisterTypeForComClients () может быть полезен для установки базовых ключей.

-121--4013118-

Я не думаю, что это то, что вы хотите сделать. Сигналы Qt глубоко интегрированы в структуру и как они генерируются и обрабатываются. Не тратьте свое время:)

-121--2652432-

Я рассматривал его для одного из своих проектов. Одним из аспектов, который может вас беспокоить, в зависимости от проекта, является использование Qt Designer . Qt-Designer создает сигнальные слоты под своими соединениями GUI. Таким образом, если вы используете дизайнера, вы получите проекты, имеющие как signals-slots , так и boost:: signals . Есть некоторые проблемы с использованием их вместе. См. этот блог. Хотя это возможно для них, чтобы работать вместе, я бы воздержался от смешивания двух подходов.

Но самая большая проблема, с которой я столкнулся, заключалась в том, что boost:: сигналы не безопасны для потоков, в то время как Qt signal-slot - это! Так что это было простое решение для меня, поскольку мой проект был многопоточным.

Вы можете получить относительные достоинства и преимущества подхода boost и Qt из стр. 11 документа в PDF.

HTH

4
ответ дан 1 December 2019 в 16:24
поделиться

Я не думаю, что это то, что вы хотите сделать. Сигналы Qt глубоко интегрированы во фреймворк и в то, как они генерируются и обрабатываются. Не тратьте свое время :)

3
ответ дан 1 December 2019 в 16:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: