Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];

Вниз

Есть небольшая проблема с запуском формы и потока из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
1-94392
volodya_
2002-04-17 17:53
2002.04.29
Help


7-94600
kioto
2002-01-27 10:59
2002.04.29
Отображение содержимого окна при перетаскивании


3-94289
IronHawk
2002-04-05 10:31
2002.04.29
Приветствую Мастеров ! Как из обыкновенного Edit-a сунуть ...


1-94364
KvORubin
2002-04-16 09:15
2002.04.29
Как коректно дать комманду с одной на другую *.EXE


14-94561
Rammst
2002-03-24 06:41
2002.04.29
HELP!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский