Здравствуйте, Tom, Вы писали:
D>>То бишь в потоке в главном STA созадем компонент (кокласс) с потоковой моделью Free
D>>Классики пишут что объект будет помещен в MTA, а доступ к созданному объекту будет через proxy (межапартметный маршалинг STA <-> MTA),
D>>Так вот сам вопрос — а нафига??? Где здесь засада?
Tom>гы гы. Я тоже не сразу догнал. Засада вот в чём. Допустим поток вошол в STA. Это означает, что он должен иногда крутить цикл выборки чо бы обеспечить реентерабельность (возможность впускать входящие вызовы во время исходящих), для обслуживания входящих вызоыоы. Затем поток вызывает обьект, который free. Так как обьект free то он защищает свои методы при помощи примитивов синхронизации, типа крит. секции итд. Что получаем: При вызове метода, поток , который в STA засыпает, на крит секции и вот тебе потенциальный дедлок.
Ага! ТО бишь код прокси делает что-то типа этого — запускает в отдельном потоке вызов метода класса из MTA а сам делает MsgWaitForMultipleObjects ожиадая завершения метода, а заодно делая Message Pumping для приходящих сообщений?
Я прав? Хитро однако!
D>>Ведь сам класс у нас деклариован как полностью потокобезпасный и почему мы должны общаться через посредника?
D>>И еще, насколько я понял, при создании MTA никаких доп. потоков создаваться не должно? Т.е. будет MTA а в нем ни одного потока, или я не прав? А как тогда?
Tom>Создасться MTA. Из него будет экспортирован интерфейс, что приведёт к созданию пула потоков, обеспечивающих входящие в MTA вызовы.

Так а с этого места поподробнее! Куда будет экспортирован интерфейс? А что за пул потоков? Я не очень много вопросов задаю?

Просто очень хочется понять всю кухню!!!
СПАСИБО!