一个多线程,挂起,唤醒,结束。创建的问题希望能回答正确 我现在要用到delphi多线程,是delphi的,不要用API,但是不知道挂起,恢复,结束的代码演示,希望能有个高手帮忙解答一下。很感谢!~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢了。我用delphi线程类创建了一个名字为mymath1 的线程,在主线程引用了unit2单元,也继承了。就是创建不了实例,这是代码:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}uses unit2;var thread1:mymath1;procedure TForm1.Button1Click(Sender: TObject);beginthread1:=mymath1.create;end;end. 不是说缺少参数吗?Create的参数是 “是否挂起”如果 true,则需要调用 resume 才能让线程运行。如果 false,则直接进行 execute 中的代码。 MyThread.Suspend 挂起MyThread.Resume 恢复 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}var hThread: THandle; num: Integer; {线程入口函数}function MyThreadFun(p: Pointer): Integer; stdcall;begin while True do begin num := Random(100); end; Result := 0;end;{建立并挂起线程}procedure TForm1.Button1Click(Sender: TObject);var ID: DWORD;begin hThread := CreateThread(nil, 0, @MyThreadFun, nil, CREATE_SUSPENDED, ID); Button1.Enabled := False;end;{唤醒并继续线程}procedure TForm1.Button2Click(Sender: TObject);begin ResumeThread(hThread);end;{挂起线程}procedure TForm1.Button3Click(Sender: TObject);begin SuspendThread(hThread);end;procedure TForm1.FormCreate(Sender: TObject);begin Timer1.Interval := 100;end;procedure TForm1.Timer1Timer(Sender: TObject);begin Text := IntToStr(num);end;end.至于线程结束可以用apiterminatethread不过不建议这么做,会引起内存泄露 互动游戏中视频运动捕捉的问题 关于控件的显示 自动计算日期的算法。。。 我是一个中专生,请各位大哥帮我找找北京哪里有很快就能拿到本科文凭的课程,谢谢! 如何检测form的重画事件 论坛上的人为什么这样冷酷? 如何能不显示数据库登陆的界面? ado+dbgrid 师父何在,偶寝食难安,却又…… 请教各位大侠:TCHART控件是哪个公司提供的 delphi多线程的问题,希望得到帮助,很急~~谢谢 delphi2010,MainMenu Autohotkey设为 maManual还是不行,怎么弄呀?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.dfm}
uses unit2;
var
thread1:mymath1;
procedure TForm1.Button1Click(Sender: TObject);
begin
thread1:=mymath1.create;end;end.
Create的参数是 “是否挂起”
如果 true,则需要调用 resume 才能让线程运行。
如果 false,则直接进行 execute 中的代码。
MyThread.Resume 恢复
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}var
hThread: THandle;
num: Integer; {线程入口函数}
function MyThreadFun(p: Pointer): Integer; stdcall;
begin
while True do
begin
num := Random(100);
end;
Result := 0;
end;{建立并挂起线程}
procedure TForm1.Button1Click(Sender: TObject);
var
ID: DWORD;
begin
hThread := CreateThread(nil, 0, @MyThreadFun, nil, CREATE_SUSPENDED, ID);
Button1.Enabled := False;
end;{唤醒并继续线程}
procedure TForm1.Button2Click(Sender: TObject);
begin
ResumeThread(hThread);
end;{挂起线程}
procedure TForm1.Button3Click(Sender: TObject);
begin
SuspendThread(hThread);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 100;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
Text := IntToStr(num);
end;end.
至于线程结束可以用api
terminatethread
不过不建议这么做,会引起内存泄露