Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1202482584
Costia
2008-02-08 17:56
2008.03.09
как правельно работатать с indy


15-1201845167
oxffff
2008-02-01 08:52
2008.03.09
The 2008 Delphi Исследование


2-1202795323
Mishenka
2008-02-12 08:48
2008.03.09
Как указать размеры картинки вставляемой в документ Word?


2-1202739868
patrick1968
2008-02-11 17:24
2008.03.09
Проблема с написанием Service а


6-1179846831
samael6
2007-05-22 19:13
2008.03.09
Вынуть аттачмент из TidMessage без его "распаковки" + с хеадером





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