![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Litkevich Yuriy |
![]()
Сообщение
#1
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Есть предложение перенести, действительно полезные, решения из этой ветки в вики
|
|
|
![]() |
SABROG |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Если не видно разницы, то зачем платить больше? ©ТАЙД ИЛИ КИПЯЧЕНИЕ Если код делает тоже самое, то это не значит, что нет никакой разницы. Попробую пояснить. QTimer::singleShot внутри производит connect и emit сигнала timeout(). Т.к. соединение Qt::QueuedConnection, то формируется event, который помещается в очередь событий. QMetaObject::invokeMethod минует стадию connect'a и emit'a, и сразу помещает эвент в очередь. Конечно в скорости особо мы врятли выйграем, но просто как факт того, что разница есть. Этот код проще конструкции в одну строку с макросом? Зачем выкидывать сюда не "секреты и интересные возможности", а индусятину ? ![]() Макросы в C++ слишком ограничены. Например нельзя получить номер enum'a по его названию. Или узнать количество enum'ов без добавления последним enumoм что-то типа thisIsEnd. Для простеньких вещей может и сгодится. И вообще раздел посвящен Qt, а не C++. |
|
|
BRE |
![]()
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Если код делает тоже самое, то это не значит, что нет никакой разницы. Попробую пояснить. QTimer::singleShot внутри производит connect и emit сигнала timeout(). Т.к. соединение Qt::QueuedConnection, то формируется event, который помещается в очередь событий. QMetaObject::invokeMethod минует стадию connect'a и emit'a, и сразу помещает эвент в очередь. Конечно в скорости особо мы врятли выйграем, но просто как факт того, что разница есть. Согласен с SABROG, invokeMethod делает тоже, только более идиологически правильней. ![]() QTimer::singleShot внутри себя создает объект QSingleShotTimer, коннектится, короче делает некоторую не очень нужную работу. Просто это первое что пришло мне на ум. ![]() |
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 16.4.2025, 4:15 |