请教 如果创建多个线程【【【【【【【【【【【【【【【【【【【【

woyun03 2010-04-09 07:28:04
type
TMyThread = class(TThread)
protected
procedure Execute; override;
Private
public
end;
implementation



procedure TMyThread.Execute;
begin
FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
//事件
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TMyThread.Create(False);
end;




如以上代码,我已经创建了一个线程,

我想在建一个线程,于是我新建一个单元,把代码放进去,就可以了


问题:不创建单元如何创建多个线程.

请贴出代码谢谢
...全文
123 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQLDebug_Fan 2010-04-11
  • 打赏
  • 举报
回复
给一个源码供你参考:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TMyThread = class(TThread)
private
FRunType: Integer;
procedure Procedure0;
procedure Procedure1;
protected
procedure Execute; override;
public
property RunType: Integer read FRunType write FRunType;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TMyThread }

procedure TMyThread.Execute;
begin
inherited;
case FRunType of
0: Procedure0;
1: Procedure1;
end;
end;

procedure TMyThread.Procedure0;
begin
//类别0执行代码
end;

procedure TMyThread.Procedure1;
begin
//类别1执行代码
end;

procedure TForm1.btn1Click(Sender: TObject);
var
MyThread0, MyThread1: TMyThread;
begin
MyThread0 := TMyThread.Create(True);
MyThread0.RunType := 0;
MyThread0.Resume;

MyThread1 := TMyThread.Create(True);
MyThread1.RunType := 1;
MyThread1.Resume;
end;

end.
woyun03 2010-04-10
  • 打赏
  • 举报
回复
求源码
定义对象.创建实例,
但是我不会 各自执行各自的事件

type
TMyThread = class(TThread)
protected
procedure Execute; override;
Private
public
end;
implementation



procedure TMyThread.Execute;
begin
FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
//事件
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TMyThread.Create(False);
end;





procedure TMyThread.Execute; 就是创建线程后执行的事件,
我不知道如果创建多个线程和多个事件.

请以我的代码给出源码...参考后就懂了
SQLDebug_Fan 2010-04-10
  • 打赏
  • 举报
回复
TMyThread.Create(False);
这样就创建了一个线程,调用多次就创建了多个线程,楼主不是如何创建单元才能创建线程,而且对程序的理解存在偏差,对DELPHI封装的线程理解不够。
xiaocongzhi 2010-04-10
  • 打赏
  • 举报
回复
你定义几个对象实例分别Create不就行了
如:
Var
Thread1:TMyThread;
Thread2:TMyThread;
Thread3:TMyThread;
分别 : Thread1:=TMyThread.Create(False);
Thread2:=TMyThread.Create(False);
Thread3:=TMyThread.Create(False);
woyun03 2010-04-10
  • 打赏
  • 举报
回复
UP~~~~~~~~~~~~~~~~
SQLDebug_Fan 2010-04-10
  • 打赏
  • 举报
回复
在DELPHI不推荐用createthread,因为用TThread会告诉DELPHI程序,现在是多线程程序。
woyun03 2010-04-10
  • 打赏
  • 举报
回复
type
TMyThread2 = class(TThread) //TMyThread2 不是TMyThread
protected
procedure Execute; override;
Private
public
end;
implementation



procedure TMyThread2.Execute; //TMyThread2
begin
FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
//事件
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TMyThread2.Create(False); //TMyThread2
end;




问题,我这样就算创建2个线程了吧?

我没接触过线程 所以不懂呵呵
  • 打赏
  • 举报
回复
俺都用createthread
亮剑_ 2010-04-10
  • 打赏
  • 举报
回复
1、创建一个TMyThread类的对象,就会创建一个线程
2、程序单元(Unit)和线程不存在对应关系
woyun03 2010-04-09
  • 打赏
  • 举报
回复
恩 是的最终是API


其他线程...我就是想TMyThread创建多个线程的方法....
QQ286251099 2010-04-09
  • 打赏
  • 举报
回复
TThread 最终也是 API
不能创建组建 可能是你同步没做好吧.
VCL 组建 的处理是在
Application 的消息循环里 也就是主线程里

你 其他线程 创建时 要 注意同步
woyun03 2010-04-09
  • 打赏
  • 举报
回复
createthread 确实可以在一个单元里创建多个线程

但是动态创建idhttp 后,在过程中进程会死掉,

我需要不停的IDHTTP,然后用createthread后过会就有事了,程序挂了.

用TMyThread 就没事了,程序一点事都没有,不知道为什么

所以想知道 TMyThread怎么1个单元里创建多个线程


dinoalex 2010-04-09
  • 打赏
  • 举报
回复
谁说不可以动态创建组件
woyun03 2010-04-09
  • 打赏
  • 举报
回复
用createthread没法动态创建组件


...

我要在这一个单元里创建多个线程 实现不了?
dinoalex 2010-04-09
  • 打赏
  • 举报
回复
你指的是你的TMyThread所在的单元,这个一个单元概念??

可以试用API的createthread

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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