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

Вниз

Как запустить еще один поток?   Найти похожие ветки 

 
Frogkiller   (2002-02-28 10:47) [0]

Подскажите плз, как создать еще один поток. То есть я все делаю как надо (как мне кажется), а код не компилируется - выдает ошибку, причем разную (в зависимости от того как подключишь модули). Существует 4 варианта:

1. В модуле main (основной поток) в раздел uses добавляю MyThread (дополнтельный поток), а в модуле MyThread туда же - main. Результат: ошибка циклической связи в модуле main (или что-то в этом роде).

2. В модуле main в раздел uses добавляю MyThread, а в модуле MyThread - ничего. Результат: Undeclared identifier: "Form1" в модуле MyThread.

3. В модуле MyThread в раздел uses добавляю main, а в модуле main - ничего. Результат: Undeclared identifier: "TCountObj" в модуле main.

4. Ни в одном ни в другом модуле в uses ничего не добавляю. Результат: см. п.2+п.3.

Что мне делать?

Коды:

Основной поток:

unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, MyThread;

type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }

co: TCountObj;

public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);
begin
co:=TCountObj.Create(true);
co.Resume;
co.Priority:=tpLower;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
co.Terminate;
co.Free;
end;

end.


Дополнительный поток:

unit MyThread;

interface

uses
Classes, main;

type
TCountObj = class(TThread)
private
{ Private declarations }

index: integer;
procedure UpdateLabel;

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 TCountObj.UpdateCaption;
begin
Form1.Caption := "Updated in a thread";
end; }

{ TCountObj }



procedure TCountObj.Execute;
begin
{ Place thread code here }

index:=1;
while index>0 do
begin
Synchronize(UpdateLabel);
Inc(index);
if index>100000 then
index:=0;

if terminated then exit;
end;

end;

procedure TCountObj.UpdateLabel;
begin
Form1.Label1.Caption:=IntToStr(Index);
end;

end.


Зарание спасибо.


 
Юрий Зотов   (2002-02-28 12:45) [1]

Остановитесь на первом варианте, но хотя бы в одном из модулей (в любом, но, судя по коду, удобнее будет в MyThread) ссылку на другой модуль надо прописать в uses в секции implementation, а не interface. Такие ссылки циклическими не считаются.



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
1-2623
Ivan Voronov
2002-04-20 11:05
2002.05.02
Шаблоны/регулярные выражения в Delphi


1-2624
PaRL
2002-04-20 16:58
2002.05.02
ListBox


1-2535
Delph
2002-04-18 16:54
2002.05.02
Вопрос про событие OnClick и OnDblClick


1-2547
Gayrus
2002-04-18 03:06
2002.05.02
TreeView и Array


1-2567
bigcrush
2002-04-19 12:08
2002.05.02
Свойство State в методе-обработчике OnDragOver