Главная страница
    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.007 c
3-94303
mcmax
2002-04-08 15:27
2002.04.29
Подскажите как назначить обработчик события новорожденному TField


1-94348
Ross
2002-04-15 13:16
2002.04.29
Парсеры


4-94626
Nuhim
2002-02-22 10:43
2002.04.29
Как перехватить уход мыши в правый край экрана


6-94533
Delphir
2002-02-13 16:30
2002.04.29
IdSMTP - HELP!!! 2


14-94539
kaif
2002-03-21 00:05
2002.04.29
Как купить D5 Pro?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский