Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
1-2597
BlackGrin
2002-04-19 19:59
2002.05.02
Gif & Delphi


1-2504
ATLANTIDO
2002-04-19 21:36
2002.05.02
окрасить BitBtn


3-2498
IronHawk
2002-04-10 13:00
2002.05.02
Приветствую Мастеров ! Эт снова Я ! Быстрый поиск по базе ?


3-2451
koks
2002-04-10 11:15
2002.05.02
QReport без DataSet - а


1-2588
YurikVN
2002-04-16 00:45
2002.05.02
EXE из EXE





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