Конференция "Основная" » Очень странное срабатывание секции INITIALIZATION
 
  • Anatoly Podgoretsky © (10.03.09 14:19) [20]
    > просто так  (10.03.2009 14:17:18)  [18]

    Порядок не будет отличаться, а рабоспособность будет.
  • просто так (10.03.09 14:24) [21]
    Будет отличаться порядок вызова секций INITIALIZATION разных модулей соответственно и работоспособность
  • IGray (10.03.09 14:37) [22]

    > Как же не имел, а что тогда плачешь?

    Не имел раньше, хотя использовал часто...
    Интересно, а на процедуры из стандартных дельфийских модулей согласно Вашему правилу, ссылаться можно?
  • IGray (10.03.09 14:40) [23]

    > просто так   (10.03.09 14:24) [21]

    мне без разницы, в каком порядке срабатывают секции инициализации разных модулей - плохо что процедура из модуля как-то вызывается до его инициализации :-(
  • Palladin © (10.03.09 14:45) [24]
    Я тебе сказал начни с F7, а не F9, и посмотри в какую процедуру инициализации зайдет ход исполнения. Третий раз повторить? Или чего?
  • IGray (10.03.09 15:03) [25]
    Не надо повторять :-)
    Сорри, что не написал здесь, просто результат этого эксперимента был отрицательный :(
    F7 показывает, что управление передаётся сначала секции инициализации модуля Б, потом из этой секции вызывается процедура из модуля А. Секция инициализации модуля А вызывается ПОЗЖЕ всего этого, а хотелось бы - ДО
    В общем всё как я писал ранее..
  • Anatoly Podgoretsky © (10.03.09 15:05) [26]
    > IGray  (10.03.2009 14:37:22)  [22]

    Это распространяется на приведенное правило, как ты справедливо заметил мое, поскольку во время срабатывания секций INITIALIZATION еще не все секции инициализированы. Отсюда могут быть проблемы.
  • Anatoly Podgoretsky © (10.03.09 15:06) [27]
    > Palladin  (10.03.2009 14:45:24)  [24]

    Ну найдет и что, а в другой раз будет другой порядок и что так постоянно и бегать?
  • Palladin © (10.03.09 15:09) [28]

    > IGray   (10.03.09 15:03) [25]

    циркуляр референсы вообще штуки вредные и нужно от них избавлятся. ну а по поводу твоей проблемы, попробуй поменять uses местами в одном из interface в implementation, в другом соответственно наоборот.
  • IGray (10.03.09 15:28) [29]
    Дело в том, что конкретно ДАННАЯ проблема для меня не критична, я могу её как-нибудь обойти, но я не хочу внезапно напороться на такое поведение позже, в гораздо более ответственном месте.

    Т.е. я не столько хочу исправить данный баг, сколько разобраться КАК ТАКОЕ ВООБЩЕ ВОЗМОЖНО...

    Спасибо всем кто помогает!
  • Palladin © (10.03.09 15:39) [30]
    Это все понятно. Ты попробовал сделать то что я написал?
  • KSergey © (10.03.09 16:00) [31]
    не надо делать так, как писал Palladin, хоть он и мастер.
    завтра подобная трабла всплывет в дугом месте.

    Надо передизайнить проект так, чтобы такой дури не было. Что думают создатели VCL о своем детище в этом разрезе - мне плевать. У них работает.
  • IGray (10.03.09 16:13) [32]
    В настоящий момент модуль А ссылается только на стандартные модули, тем не менее проблема осталась..
  • clickmaker © (10.03.09 16:21) [33]
    если из секции инициализации Б вызывается процедура А до секции инициализации А, значит Б в проекте выше, чем А.
  • Германн © (11.03.09 01:33) [34]

    > IGray   (10.03.09 16:13) [32]

    Имхо, нужно купить и изучить учебник.
    Ну не может процедура начать выполнение, пока другая процедура того же потока не закончилась.
  • Palladin © (11.03.09 08:05) [35]

    > KSergey ©   (10.03.09 16:00) [31]

    Я посоветовал по возможности избавиться от циркуляр референсе. Если от этого избавиться ему не предоставляется возможности (но как видно из ответа очень даже возможно) то поменять места определений. А в VCL нет в секции initialization вызовов к другому модулю который так же использует этот.
  • KSergey © (11.03.09 09:13) [36]
    > IGray   (10.03.09 16:13) [32]
    > В настоящий момент модуль А ссылается только на стандартные модули, тем не менее проблема осталась..

    Какая?
    Уже же сказано: надо передизайнить так, чтобы инициализация одного модуля (и вызываемые из нее функции!) не зависели от инициализации других модулей ВООБЩЕ!
    Ибо такая ситуация будет все время бить по ногам, сегодня ее решить удасться, а завтра снова на нее наткнемся.
  • IGray (11.03.09 13:16) [37]
    Всем спасибо! Пока у меня утром глючил инет, я и сам кажется въехал..
    Похоже правильный ответ звучит так:
    "Два и более модулей имеющих секции инициализации не должны прямо либо косвенно циклически ссылаться друг на друга"
    В противном случае у компилятора "едет крыша", т.к. процесс поиска правильной последовательности инициализации как бы зацикливается, что приводит к описанному в вопросе эффекту, причём никаких предупреждений компилятор не выдаёт (а ведь мог бы).

    Прошу прощения за ошибочную информацию в посте

    > IGray   (10.03.09 16:13) [32]
    > В настоящий момент модуль А ссылается только на стандартные модули, тем не менее проблема осталась..


    Не знаю как это вышло, но я недоперекомпилировал проект :-(
    После полнейшей перекомпиляции проблема исчезла, т.е. дело было только в вышеуказанном.


    >  чтобы инициализация одного модуля (и вызываемые из нее
    > функции!) не зависели от инициализации других модулей ВООБЩЕ!


    Думаю это уже слишком, т.к. инициализация модулей БЕЗ циркулярных референсов выполняется совершенно спокойно и однозначно...

    Ещё раз всем спасибо за участие в моей проблеме!

    Кстати, знает ли кто-нибудь более-менее удобное средство визуализации зависимостей между модулями проекта?
  • Palladin © (11.03.09 13:20) [38]
    зависит от требований к этому "более-менее" :) меня и вот ModelMaker устраивает... Розыч тут чего то ваял, но результатами так и не похвастался :)
  • Rouse_ © (11.03.09 13:40) [39]
    Не скажу что у меня прямтаки удобное, я его просто банально не довел до конца, т.к. нет времени, а по моим прикидкам чтобы довести это дело до ума нужно месяца три.
    Для работы использовали эту утилитку несколько раз чтоб понять откуда ноги растут у того или иного модуля, нам в принципе для небольшого рефакторинга хватило.
    Воть: 1.4Мб
    http://rouse.drkb.ru/other/unitweb.zip
 
Конференция "Основная" » Очень странное срабатывание секции INITIALIZATION
Есть новые Нет новых   [118410   +22][b:0][p:0.001]