Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.29;
Скачать: CL | DM;

Вниз

Есть небольшая проблема с запуском формы и потока из dll   Найти похожие ветки 

 
Upendra   (2002-04-13 10:16) [0]

Ситуация следующая - из длл загружается форма
потом из той же длл запускается поток, который для выдачи результатов использует элементы загруженной формы.
Все идет нормально до первого оператора Synchronize, где все это дело и замирает.
Вопрос - как это дело исправить ?
Заранее благодарен !


 
Fantasist   (2002-04-13 22:17) [1]

Деббагером смотрел? До какого места доходит? Где останавливается?
Хотя я думаю дело вот в чем: эта синхронизация обеспечивается за счет вызова глобальной функции CheckSynchonize в главном потоке, причем используя глобальные переменные. Synchronize просто ставит себя в очередь и ждет пока это произойдет. А так как dll у тебя компилируется отдельно, то все глобальные переменные(как и функции, но в данном случае это, пожалуй, не важно) для нее существуют отдельно, и твой основной процесс ничего об этом не знает.


 
Upendra   (2002-04-15 10:22) [2]

Спасибо !
Думаю так оно и происходит.
дебаггером идет до какого нить каптиона и тупо подвисает.
решил эту проблему заменой synchronize на

SM_SYNCMSG = WM_USER + $531;
SendMessage(Semform.Handle,SM_SYNCMSG, 0, 0);

Все заработало
Правда возникла другая проблема *)
функция onTerminate не выполняется, хотя присваивание проходит нормально... *(


 
Digitman ©   (2002-04-15 12:30) [3]

1. Обработчик OnTertminate() синхронизируется с осн.потоком (по кр.мере - в Д5), т.е. неявно вызывается в контексте Synchronize().

2. Метод Execute() у тебя, вполне возможно, корректно не завершается по каким-то причинам (бесконечный цикл, необработанное искл-е и т.п.)


 
Upendra   (2002-04-16 13:42) [4]

гм...
когда поток не находиться в длл - все работет просто прекрасно...
и OnTertminate() и Synchronize().
проблема возникла только при запихивании в длл.
поток достигает завершающего енд в Execute и все...
дальше дебаггер не идет *(

Дельфи 6 апдейт 2


 
Digitman ©   (2002-04-16 14:18) [5]

хм .. а как это он у тебя "достигает завершающего енд в Execute", если, сам же говоришь, на первом же "операторе Synchronize()... все это дело и замирает" ??
Ты исключения-то "гасишь" в Execute() ?


 
Upendra   (2002-04-16 19:07) [6]

я же выше говорил, что заменил Synchronize на
SM_SYNCMSG = WM_USER + $531;
SendMessage(Semform.Handle,SM_SYNCMSG, 0, 0);

которое и заменяет оператор синхронизации.
после чего и открылись новые проблемы *(


 
Fantasist   (2002-04-17 08:22) [7]

procedure TThread.DoTerminate;
begin
if Assigned(FOnTerminate) then Synchronize(CallOnTerminate);
end;


Это тебя беспокоит?
Все тот же Synchronize. ;)


 
Digitman ©   (2002-04-17 08:31) [8]

>Upendra

Если конструктор доп.потока, класс которого реализован в DLL, вызывается в доп.потоке хост-процесса, то эта ситуация вполне объяснима.

см.
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1017895661&n=3



Страницы: 1 вся ветка

Текущий архив: 2002.04.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-94396
Swp
2002-04-17 15:49
2002.04.29
Запись и чтение текстового файла.


4-94646
Romul
2002-02-21 15:34
2002.04.29
Проблема с handle s у дочерних элементов


3-94264
Konuhov Sergey
2002-04-02 18:07
2002.04.29
Как заблокировать несколько записей в InterBase


3-94291
B_A_V
2002-04-08 18:39
2002.04.29
Помогите пожалуйста разобраться, бьюсь уже целые сутки над создан


7-94587
XM-AD
2002-01-30 02:29
2002.04.29
А можно ли???