Re[3]: Запук формы из dll
От: Ihor Osovyak Украина  
Дата: 17.06.04 16:17
Оценка: +1
Здравствуйте, realTrust, Вы писали:


S>>Прочитайте help на тему потоковой безопасности VCL. Полагаю, стартовав от классы TThread, Вы легко найдете соответствующий раздел.


T>Я так понял, вы имели ввиду Synchronize?


T>Я создал поток в функции Run,затем:


T>
T>void __fastcall Thread1::CreateForm()
T>{
T>       TForm3 *MyForm3 = new TForm3(0);
T>       MyForm3->Show();
T>}


T>void __fastcall Thread1::Execute()
T>{
T>      Synchronize(CreateForm);
T>}
T>
и все равно на том же месте вываливается...


Хм. А знаете ли Вы, что у Вас Thread1::CreateForm() выполнится в контексте главного потока, и соответственно хендлом созданной формы будет владеть основной поток? А знаете ли Вы, что в этом случае, все сообщения на хендл этой формы будут обрабатываться в контексте того же главного потока? А знаете ли Вы, что в таком случае желательно будет вызывать методы формы только с оновного потока? А знаете ли Вы, что толку от такой мультитиер, как с козла молока?
А знаете ли Вы, что ваш тоток закончит существование, едва только успев создать форму? И много чего еще ....

Есть подозрение, что очень многое из вышеперечисленного Вы не совсем четко представляете.

Зы. Работа с формами немодальными в ДЛЛ подразумевает наличие квалификации, немного выше бегин левел, даже для случая однопоточной реализации, извините за прямоту. В VCL не расчитана на реализацию многопотточного UI (есть один извратный способ запустить форму в отдельном потоке и заставить ее работать вполне корректно, но как человек, проходивший этот путь до конца, позволю себе заметить — не стоит идти этим путем, это примерно из того же разряда, что гланды рвать не через то отверствие, через которое природа велела, а через противоположное).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.