Автор Дмитрий Золотарев задал вопрос в разделе Другие языки и технологии
Delphi, TThread: CriticalSection и Synchronize и получил лучший ответ
Ответ от Scorpio[гуру]
>> TheCalcThread.ConstructPriv(IDRes, IDPer, IDTrans, IDReason);
имхо, это плохая практика вызывать методы класса потока из другого потока. Лучше использование потока ограничить только вызовом методом Execute. А если нужно изменить поведение выполнения потока, тогда лучше в классе потока завести какие-нибудь флаги, а в методе Execute проверять установлен флаг или нет.
На счет зависания, ты из главного потока вызываешь TheCalcThread.ConstructPriv, и скорее всего доступ к этой секции все еще залочен той-же секцией в TCalcThread.Execute. Попробуй завести для каждого участка кода разные крит. секции.
Scorpio
Просветленный
(24134)
Судя из описания у тебя там сложная логика, я по правде ничего не понял про ресурсы и про их зависимости 🙂