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

Вниз

Как правильно вызывать поток ?   Найти похожие ветки 

 
SemFLY ©   (2002-07-14 02:22) [0]

В хелпе сказано с помощью Create, но у меня выскакивает ошибка
Access violation at address 00414234....
-------------------------------------------
Вот основная программа:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Unit2;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Lame : TThread;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
Lame.Create(False); // тут я запускаю поток
end;

end.

----------------------------------------------

Вот отдельный поток:

unit Unit2;

interface

uses
Classes, Dialogs;

type
Lame = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;

implementation

{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,

Synchronize(UpdateCaption);

and UpdateCaption could look like,

procedure Lame.UpdateCaption;
begin
Form1.Caption := "Updated in a thread";
end; }

{ Lame }

procedure Lame.Execute;
begin
ShowMessage("TThread Start ! ");
end;

end.


 
Юрий Зотов ©   (2002-07-14 03:09) [1]

...
ALame: Lame; // !!!
...

procedure TForm1.Button1Click(Sender: TObject);
begin
ALame := Lame.Create(False); // !!!
end;


 
SemFLY ©   (2002-07-14 13:56) [2]

Юрий, Спасибо огромное ! :)))
Всё работает.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Тут по ходу появился ещё вопрос, почему при добавление в отдельный поток модуля Dialogs, поток в свою очередь не может вызвать ShowMessage и MessageDlg ?
Пишет ошибку: EInvalidOperation with message "Canvas does not allow drawing"
Как можно этого избежать и получить окошко с сообщением ?


 
Юрий Зотов ©   (2002-07-14 14:39) [3]

Потому что стандартные диалоги Delphi должны работать в контексте главного потока. Либо вызывайте их через Synchronize, либо не используйте совсем, а используйте API-шную MessageBox с нулем в первом параметре и флагом MB_TASKMODAL.


 
SemFLY ©   (2002-07-14 14:57) [4]

Ясно !
-------
Спасибо ! :)))



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

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

Наверх




Память: 0.47 MB
Время: 0.017 c
14-81486
mrX
2002-06-26 14:53
2002.07.25
Кодировка


1-81251
vanek
2002-07-14 18:56
2002.07.25
проги,проги,проги


7-81507
vlad0007
2002-04-11 20:02
2002.07.25
Okey кто нить знает???


1-81369
MASTERok
2002-07-14 00:53
2002.07.25
Прозрачность


3-81128
Vicheslav
2002-07-03 13:10
2002.07.25
Помогите с Проектированием таблиц.