Главная страница
    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-1202894259
Washington
2008-02-13 12:17
2008.03.09
Двойной щелчок по "чексу" в CheckListBox e


2-1202810874
Аян
2008-02-12 13:07
2008.03.09
нужна подсказка


8-1175518143
haunt41
2007-04-02 16:49
2008.03.09
Вывод случайной картинки, rxLib


15-1201992664
ICQ
2008-02-03 01:51
2008.03.09
Время молчания клиетна


2-1202813111
Цукор5
2008-02-12 13:45
2008.03.09
преобразование строки





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