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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
1-25373
Indy
2003-12-25 04:45
2004.01.09
Документация по Indy


6-25470
Копосов Н.В.
2003-11-03 09:45
2004.01.09
Socket


1-25397
Michael K
2003-12-24 14:54
2004.01.09
GraphicEx требует JPG.PAS, а его нет!


3-25230
bushmen
2003-12-10 18:00
2004.01.09
XML


3-25253
ShadowSmart
2003-12-10 14:22
2004.01.09
Сжатие *.mdb через ADO