创建线程的问题(150分)

  • 主题发起人 主题发起人 lincker
  • 开始时间 开始时间
L

lincker

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在的程序需要按下一个按钮,就进行大量计算,计算时间很长的话就和死机一样,
无法终止,所以我想把这计算变成一个线程,终止线程还是比较简单的,但是应该怎么
创建线程呢?望高手指点,越详细越好,小弟较菜的说。
 
Delphi的Demo目录下面有个TThread目录下面有一个线程的例子。
 
同意楼上,delphi的例子已经非常清楚了
建议多看帮助和例子那里面都是精华
原来我也不喜欢看帮助,现在觉得很多问题都能在帮助中找到
 
定义一个类, inherited from TThread
然后重载它的execute方法
再就跟其它类一样新建了.
 
unit MyThread;
interface
uses
Windows, Forms, Classes, Sysutils, math;
type
TGuoThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute;
override;

public
constructor Create;
//可以传递参数,比如Create(s:string);
end;

implementation
uses UnMain;
constructor TGuoThread.Create;
begin
inherited Create(False);
//你想干什么
end;

procedure TGuoThread.Execute;
begin
//你想干什么,做计算吗?
//结束了线程也完了
end;

end.

在主窗口里定义
var
GuoThread:TGuoThread
调用
GuoThread:=TGuoThread.Create;
 
>>终止线程还是比较简单的
不一定喔,要看你的计算能不能中止。
 
//最简单的方法就是API
var
thid:LongWord;
begin
begin
trhread(nil,0,@函数名,nil,false,thid);
end;
 
在循环里面加入Application.ProcessMessages用来响应外部命令。
可以不用线程。
 
但是现在大量计算的时间很长,占用系统资源很多,像死机了一样,我想在这期间显示
一个动画以取代进度条,怎么办呢?系统资源肯定不够啊。
to:秋之叶 如果在循环里面加入Application.ProcessMessages用来响应外部命令。能同时
正常放一个小动画吗?会不会断帧呢?
to:gotosea 我用你的办法 在type中加入TGuoThread = class(TThread),
但是编译报错 “expect‘:’but‘=’find”,另外用线程能实现我显示动画的目的
吗?用线程难道占用系统资源会少吗??
 
我用hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);的办法创建线程,
在MyThreadfunc函数里播放动画,但是没有效果。
动画是在另一个form5里面的panel1上放,用的是tmediaplayer,autoopen也设true了,
函数里面form5.mediaplayer1.play;一点效果看不到。
另外用gotosea的办法
我在Create事件中什么也没写,如下:
constructor tmythread.Create;
begin
inherited Create(False);
//运行到这里死机
end;

procedure TGuoThread.Execute;
begin
form5.mediaplayer1.play;
end;
主程序中是myThread:=TmyThread.Create;
望高手指点!急!
 
调用Application.processmessage()这个函数就可以了!我同事前几天刚刚问过我这个问题。 :)[:D]
代码:
 
多人接受答案了。
 
后退
顶部