Russian Qt Forum
Ноябрь 02, 2024, 16:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Порядок вызова слотов при испускании сигнала.  (Прочитано 7173 раз)
Sancho_s_rancho
Гость
« : Май 30, 2011, 09:03 »

Листал я на досуге документацию по qt 4.7, и наткнулся ненароком на такой абзац
Цитировать
If several slots are connected to one signal, the slots will be executed one after the other, in the order they have been connected, when the signal is emitted.

"Фига" - подумал я. Вроде ж он не определен, этот порядок. Открыл документацию к 4.5:
Цитировать
If several slots are connected to one signal, the slots will be executed one after the other, in an arbitrary order, when the signal is emitted.

Зачем к концу жизненного цикла четвертой ветки они этот порядок установили?
Записан
SASA
Гость
« Ответ #1 : Май 30, 2011, 09:45 »

Я думаю порядок был всегда. Но пользоваться этим порядком не есть правильно. Вот они и писали, что в случайном.
А теперь признались  Веселый
Записан
Akon
Гость
« Ответ #2 : Май 30, 2011, 09:52 »

Чтоб уменьшить энтропию продукта Улыбающийся
Записан
Sancho_s_rancho
Гость
« Ответ #3 : Май 30, 2011, 10:03 »

Чтоб уменьшить энтропию продукта Улыбающийся
Разработчик использовал версию 4.7, а дистроклепатели более раннюю. Если какого-то метода нет в ранней версии, то программа просто не соберется. С этим же подходом все может успешно собраться и запустится и наделать бед в рантайме.
Да, конечно, разработчик может жирный варнинг в pro добавить. Но мы же знаем этих разработчиков Подмигивающий . Да и никто не гарантирует, что он начинал изучение Qt c с дремучих версий и в курсе что надо кого-то о чем-то предупреждать.
« Последнее редактирование: Май 30, 2011, 10:10 от Sancho_s_rancho » Записан
Sancho_s_rancho
Гость
« Ответ #4 : Май 30, 2011, 10:09 »

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

В течение пяти лет я и мои коллеги девелоперы Qt знали и использовали порядок connect для установления порядка вызова слотов. Мы не рассказывали об этом никому. Обманывали своих жен, детей и даже пользователей платных версий Qt. Но мы не может более держать это в тайне. Пусть все знают эту горькую правду - этот порядок есть.
Записан
Akon
Гость
« Ответ #5 : Май 30, 2011, 15:04 »

Цитировать
Разработчик использовал версию 4.7, а дистроклепатели более раннюю. Если какого-то метода нет в ранней версии, то программа просто не соберется. С этим же подходом все может успешно собраться и запустится и наделать бед в рантайме.
Скорее наоборот, если бы полагались на порядок, а в новой версии его бы не стало.

В общем случае в многопоточной среде толку от порядка нет, поскольку без специальных ухищрений вы не сможете выполнить соединения сигнал-слот в определенном порядке.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Июнь 01, 2011, 13:57 »

Цитировать
Изучив немного посты в mailist'e trolltech я вынесл для себя следующую мысль. На данный момент порядок вызовов слотов можно предсказать, однако разработчики не дают гарантии того, что в новых версиях библиотеки порядок вызовов не изменится. Может быть вариант, когда вызовы будут сортироваться для достижения максимальной производительности. Поэтому, если нужен строгий порядок вызовов слотов...
тыц
Записан

Юра.
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #7 : Июнь 01, 2011, 14:30 »

В течение пяти лет я и мои коллеги девелоперы Qt знали и использовали порядок connect для установления порядка вызова слотов. Мы не рассказывали об этом никому. Обманывали своих жен, детей и даже пользователей платных версий Qt. Но мы не может более держать это в тайне. Пусть все знают эту горькую правду - этот порядок есть.
Обычно когда что-то задокументировано как «undefined», но разработчики «знали и использовали», заканчивается очень трудно отлавливаемыми багами, когда это всё же поменяется или просто перейдёте на другой компилятор, где это работает не так: поучительная история.
Записан
ритт
Гость
« Ответ #8 : Июнь 05, 2011, 17:38 »

о, да, поучительная история о том, как торвальдз даёт мастер-класс толстого троллинга...

если перейдёте на другой компилятор, то вызов слотов там будет точно такой же.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.255 секунд. Запросов: 22.