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

Вниз

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

 
alexnmsk   (2008-02-13 11:24) [0]

Здравствуйте, уважаемые мастера.
Имеется dll, в которой экспортируемая функция создает форму (хранится в этой же dll), и вызывает ее ShowModal. В этой форме нужно выполнять определенные действия в отдельном потоке. Для примера вот код в юните потока:

procedure TMyThread.ClearList;
begin
EOBJ.Label1.Caption:="1111";
EOBJ.Label1.Caption:="1111";
end;

procedure TMyThread.ClearList2;
begin
EOBJ.Label1.Caption:="2222";
EOBJ.Label1.Caption:="2222";
end;

procedure TMyThread.Execute;
begin
   Synchronize(ClearList);
   Synchronize(ClearList2);
end;

в форме по нажатию кнопки, пытаюсь создать поток:

procedure TEOBJ.Button1Click(Sender: TObject);
var
 t: ThRefreshPictureList;
begin
 t := ThRefreshPictureList.Create(False);
end;

При выполнении никаких изменений в Label1 и Label2 не происходит. Поток запускается, но Synchronize(ClearList2) даже не выполняет. ???


 
alexnmsk   (2008-02-13 11:30) [1]

Опечатался. По нажатию кнопки:

procedure TEOBJ.Button1Click(Sender: TObject);
var
t: TMyThread;
begin
t := TMyThread.Create(False);
end;


 
clickmaker ©   (2008-02-13 11:33) [2]


> EOBJ.Label1.Caption:="2222";
> EOBJ.Label1.Caption:="2222";

а с первого раза не присваивается? )


 
alexnmsk   (2008-02-13 11:35) [3]

тоже опечатка
EOBJ.Label1.Caption:="1111";
EOBJ.Label2.Caption:="1111";


 
clickmaker ©   (2008-02-13 11:43) [4]


> но Synchronize(ClearList2) даже не выполняет

в отладчике не заходит в ClearList2?


 
alexnmsk   (2008-02-13 11:44) [5]

Я так понимаю, что дело во взаимодействии со свойствами объектов, потому что

procedure ThRefreshPictureList.ClearList;
begin
showmessage("1");
showmessage("2");
EOBJ.Label1.Caption:="1111";
showmessage("3");
EOBJ.Label2.Caption:="1111";
end;

showmessage("3") - даже не вызывается


 
Сергей М. ©   (2008-02-13 11:46) [6]

Объекты Application у вызывающего и вызываемого модулей разные, потому и не работает Synchronize()

Уж сколько раз твердили миру - Делфи-формы следует хранить и создавать в bpl, а не в dll !


 
clickmaker ©   (2008-02-13 11:57) [7]


> [5] alexnmsk   (13.02.08 11:44)

не лень шоумесседж-то столько раз писать?
давно бы отладчиком прошелся...


 
Anatoly Podgoretsky ©   (2008-02-13 12:14) [8]

> alexnmsk  (13.02.2008 11:24:00)  [0]

Наш клиент и верный последователь Архангельского.


 
Leonid Troyanovsky ©   (2008-02-13 13:25) [9]


> Anatoly Podgoretsky ©   (13.02.08 12:14) [8]

> верный последователь Архангельского.

И продолжатель :)
Не только overSynchronize и форма в длл, но и поток туда ж.

--
Regards, LVT.


 
DiamondShark ©   (2008-02-13 18:01) [10]


> Объекты Application у вызывающего и вызываемого модулей
> разные, потому и не работает Synchronize()

Это что ж такого с синхронайзом сотворили в семёрке?!

В пятой было всё просто, как редиска:

procedure TThread.Synchronize(Method: TThreadMethod);
begin
 FSynchronizeException := nil;
 FMethod := Method;
 SendMessage(ThreadWindow, CM_EXECPROC, 0, Longint(Self));
 if Assigned(FSynchronizeException) then raise FSynchronizeException;
end;

Никакой зависимости от Application тут не наблюдается.



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

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

Наверх




Память: 0.49 MB
Время: 0.01 c
2-1202719916
Kolan
2008-02-11 11:51
2008.03.09
Как узнать какие именно пакеты нужны приложению?


15-1201951330
ketmar
2008-02-02 14:22
2008.03.09
любителям консольных утилит — просьба погонять


3-1192704611
9899100
2007-10-18 14:50
2008.03.09
oracle


15-1201989644
KilkennyCat
2008-02-03 01:00
2008.03.09
Околофорумные, которые неработающие форумные....


4-1182533535
Dio
2007-06-22 21:32
2008.03.09
RS-232 состояние RTS, DTR