多线程基础问题

neowang 2003-08-22 06:26:50
刚刚开始接触多线程,下面是使用Delphi 7照“Delphi 6开发人员指南”上的一个例子做的,可是编译报错:[Fatal Error] Main.pas(7): Circular unit reference to 'Main'。请问这个循环的引用怎么解决呢?
源码
unit Main;

interface

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

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

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
NewThread:TMyThread;
begin
NewThread:=TMyThread.Create(False);

end;

end.

unit MyThread;

interface

uses
Classes,Main;

type
TMyThread = class(TThread)
private
{ Private declarations }
Answer:Integer;
protected
procedure Execute; override;
procedure GiveAnswer;
end;

implementation

{ TMyThread }

procedure TMyThread.GiveAnswer;
begin
Form1.Edit1.Text:=IntToStr(Answer);
end;

procedure TMyThread.Execute;
var
i:Integer;
begin
{ Place thread code here }
FreeOnTerminate:=true;
for i:=i to 2000000 do
begin
if Terminated then break;
inc(Answer,Round(Abs(Sin(Sqrt(i)))));
Synchronize(GiveAnswer);
end;
end;

end.
...全文
34 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
answerfish 2003-09-10
  • 打赏
  • 举报
回复
turtle
neowang 2003-08-23
  • 打赏
  • 举报
回复
呵呵,是我太粗心了。
但是能不能解释一下为什么这样就不是“循环的单元引用”了呢?
lxpbuaa 2003-08-22
  • 打赏
  • 举报
回复
将引用放在实现(impelement)而不是接口(interface)部分就可以了。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
zjybestzjybest 2003-08-22
  • 打赏
  • 举报
回复
unit MyThread;

interface

uses
Classes;

type
TMyThread = class(TThread)
private
{ Private declarations }
Answer:Integer;
protected
procedure Execute; override;
procedure GiveAnswer;
end;

implementation
uses
Main;

{ TMyThread }

procedure TMyThread.GiveAnswer;
begin
Form1.Edit1.Text:=IntToStr(Answer);
end;

procedure TMyThread.Execute;
var
i:Integer;
begin
{ Place thread code here }
FreeOnTerminate:=true;
for i:=i to 2000000 do
begin
if Terminated then break;
inc(Answer,Round(Abs(Sin(Sqrt(i)))));
Synchronize(GiveAnswer);
end;
end;

end.

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧