一个多线程,挂起,唤醒,结束。创建的问题希望能回答正确

hyf3246875 2011-03-30 08:59:45
我现在要用到delphi多线程,是delphi的,不要用API,但是不知道挂起,恢复,结束的代码演示,希望能有个高手帮忙解答一下。很感谢!~
...全文
233 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
funxu 2011-04-20
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
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
不过不建议这么做,会引起内存泄露
sforiz 2011-04-10
  • 打赏
  • 举报
回复
MyThread.Suspend 挂起
MyThread.Resume 恢复
iamduo 2011-03-31
  • 打赏
  • 举报
回复
不是说缺少参数吗?
Create的参数是 “是否挂起”
如果 true,则需要调用 resume 才能让线程运行。
如果 false,则直接进行 execute 中的代码。
dinoalex 2011-03-31
  • 打赏
  • 举报
回复
你的线程单元都没贴出来, 怎么查问题
hyf3246875 2011-03-30
  • 打赏
  • 举报
回复
谢谢了。我用delphi线程类创建了一个名字为mymath1 的线程,在主线程引用了unit2单元,也继承了。就是创建不了实例,这是代码:

unit Unit1;

interface

uses
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.
dinoalex 2011-03-30
  • 打赏
  • 举报
回复
之前那个帖子那里不是有[开始],[关闭]吗? 这个就是啦~~

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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