Главная страница
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.013 c
4-81512
z_1
2002-05-20 15:52
2002.07.25
Хендл активного окна


7-81498
Crypter
2002-05-08 14:37
2002.07.25
Как узнать о том, что нажали на


1-81344
Александр
2002-07-12 19:57
2002.07.25
Помогите разобраться


14-81419
N A N
2002-06-21 14:23
2002.07.25
про венгерскую нотацию и правилам оформления проги на дельфи?


3-81125
DKalinin
2002-07-02 15:31
2002.07.25
что это? - Rowset position cannot be restarted