Форум: "Основная";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];
ВнизКак правильно вызывать поток ? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c