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

Вниз

Thread & dll   Найти похожие ветки 

 
TUser   (2003-12-24 13:41) [0]

Переделываю немножко архитектуру своего проекта. Решил часть кода упихать в dll. В частности, в dll попал поток, который через что-то рисует на форме. Там написано

synchronize(drform); // drform - метод, который осуществлет отрисовку

В юните, где этот поток до сих пор жил, все было нормально. А в dll метод synchronize почему-то не работает - трассировка показывает, что управление методу drform не передается. Все остальное работает нормально, в т.ч. и когда надо из dll что-то сделать с этой формой.
В чем тут дело и как лечить?


 
TUser   (2003-12-24 13:43) [1]

Да, кстати, если написать
{synchronize(}drform;//);
то отрисовка происходит, но так писать нельзя, т.к. бывает "Canvas does not allow drawing"


 
Digitman   (2003-12-24 13:45) [2]

1. какой кодовый поток хост-процесса в САМЫЙ первый раз вызвал ф-цию из DLL, которая создала TThread ?

2. Чем и как долго занят осн.код.поток хост-процесса в то время как в доп.код.потоке происходит вызов Synchronize() ?


 
TUser   (2003-12-24 13:53) [3]

1. Поток в dll создается при ее загрузке. Т.е. так
library ...
...

exports
list;

begin
MyThread1:=TMyThread.Create;
FreeOnTerminate:=true;
Priority:=tpLower;
end;

При загрузке проекта в FormCreate динамически подгружаю dll. Потом Вызываю там процедуру из dll, которая запускает поток (Resume).

2. Основной поток ничем не занят. Тут смысл весь в том, что я почти все функции вывел за пределы основного проекта - в dll, чтобы проще было подгружать разные модули, которые пожелает юзер. В основном проекте остался только PopupMenu, CoolTrayIcon и еще несколько такого рода компонентов.


 
Digitman   (2003-12-24 14:06) [4]


> Основной поток ничем не занят


точно ? т.е. после отработки FormCreate() и последующей визуализации этой формы ты просто ждешь событий польз.интерфейса и не выполняешь никаких циклов и пр. ?


 
TUser   (2003-12-24 14:11) [5]

Да, в основном проекте никаких мною созданных циклов нет. Просто жду событий.
Кстати, если вывести код инициализации dll в отдельную процедуру - происходиттот же глюк.


 
Digitman   (2003-12-24 14:14) [6]

с какими опциями использования run-time packages построены хост-приложение и библ-ка ?


 
TUser   (2003-12-24 14:28) [7]

Не очень понял вопрос. Имеется в виду Project\Options\Packejes\Run-time packajes?
Если да - то там ничего не используется, "Build with ... " не отмечен.

А вообще - должны ли быть различия в использовании метода Synchronize в dll и в обычной программе.


 
Иван Шихалев   (2003-12-24 14:31) [8]

> А вообще - должны ли быть различия в использовании
> метода Synchronize в dll и в обычной программе.

Должны быть различия в использовании любых методов любых объектов.


 
TUser   (2003-12-24 14:32) [9]

Спасибо, Digitman. Поставил vcl, вроде все заработало.


 
Digitman   (2003-12-24 14:41) [10]


> Поставил vcl, вроде все заработало


если бы ты еще и понял , почему не работало и почему заработало, было бы совсем славно


 
TUser   (2003-12-24 14:53) [11]

Ну, видать, прорисовка формы - она же через VCL делается. Вот ей и нужен этот пакет. Наверное.
А если честно - действительно небезынтересно.


 
Digitman   (2003-12-24 15:03) [12]

вкратце так :

пока у тебя были сняты эти "галки" в обоих проектах, объекты Application у каждого из них были разные.

после установки "галок" оба модуля стали использовать один и тот же объект Application

внутренний механизм работы метода Synchronize() тесно связан с механизмом выборки/диспетчеризации оконных сообщений, который реализован в объекте Application



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

Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
6-25481
Novenkij
2003-11-07 11:49
2004.01.09
Скорость соединения


1-25278
Masa
2003-12-23 14:56
2004.01.09
Exception


3-25203
loki128
2003-12-12 16:46
2004.01.09
Считать значения полей записи


1-25354
BaDeVlad
2003-12-25 08:58
2004.01.09
Как сделать главную форму невидимой при запуске?


1-25346
roman_kyl@chat.ru
2003-12-22 11:26
2004.01.09
ActiveDesktop





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