Форум: "Начинающим";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];
ВнизПоток в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.047 c