delphi中有办法在另一个过程或函数里结束另外一个过程或函数里的循环??

我要模拟一下按键精灵..但是需要开始和结束程序运行的功能.前提是程序不能关闭.只是结束正在运行的过程或函数而已..就是整个程序不关闭.但结束正在运行的所有,比如开始按钮函... 我要模拟一下按键精灵..但是需要开始和结束程序运行的功能.前提是程序不能关闭.只是结束正在运行的过程或函数而已..就是整个程序不关闭.但结束正在运行的所有,比如开始按钮函数里产生的循环
我在开始按钮里有个无限的WHILE循环..但我想在结束按钮里面结束整个程序或是结束开始按钮的过程..应该怎么办??我试过在结束按钮里用
以下是代码片断:
procedure TForm1.btn1Click(Sender: TObject);
var
i:Integer;
begin
i:=0;
lbl1.Caption:=IntToStr(i);
while i<20 do
begin
lbl1.Caption:=IntToStr(i);
Delay(500);
i:=i+1;
end;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin

end;

按钮2里面我要怎么写才能结束按扭1里面正在运行的循环??
展开
 我来答
ldylz
2011-09-10 · TA获得超过130个赞
知道答主
回答量:384
采纳率:0%
帮助的人:107万
展开全部
按纽1里的程序,搞个全局变量,在按钮2里改变这个全局变量,不就可以控制了吗。
更多追问追答
追问
我知道这个办法..但是..当循环里的程序一多的话...就必须得等到运动完了才能去判断....
要不然就只有每运行一句都加上判断.这样更不行了
追答
一般是这样的,  不管你用线程也好, 用这种方法也好,总要把一段代码执行完吧, 
想及时退出的话, 就只能多加些判断了, 每执行一部份就判断一下.
百度网友7abb9e5b6
2011-09-10 · TA获得超过612个赞
知道小有建树答主
回答量:190
采纳率:100%
帮助的人:383万
展开全部
你按钮1的循环用 多线程来实现,就可以用按钮2来中断这个线程
追问
线程我还不会啊..给个简单的例子呗
追答
这个你可以参考下, delphi 里   Demos  文件夹里  Threads  的  示例,你可以看到 如何用线程操作  ,里面的示例是三个排序方法的多线程调用。
线程类的声明,实现,线程函数。 模仿一下。很久没动delphi 了,你可以百度 delphi 多线程,很多示例的。个人实在写不出示例,都是拿别人的模仿的。
下面这些是节选自 Threads 的SortThds.pas 开头线程类的声明
type

{ TSortThread }

PSortArray = ^TSortArray;
TSortArray = array[0..MaxInt div SizeOf(Integer) - 1] of Integer;

TSortThread = class(TThread) //这里是TSortThread 类声明 继承自 基本线程类 TThread
private //私有成员
FBox: TPaintBox; //这个是一个 TPaintBox 类,因为示例中要对主窗口的一个 TPaintBox 对象操作,所以声明一个
FSortArray: PSortArray; // 用来存放要排序的数组
FSize: Integer;
FA, FB, FI, FJ: Integer; //几个整形变量声明
procedure DoVisualSwap; //这里是以FBox进行操作,画线之类的,是Sort 调用 VisualSwap 时调用到的!!
protected
procedure Execute; override; //重载,在这里执行你自己写的函数 ,这里是排序 Sort
procedure VisualSwap(A, B, I, J: Integer);
procedure Sort(var A: array of Integer); virtual; abstract; //抽象的 Sort排序函数,因为现在这个类只是三种排序的基类,所以用抽象的,在具体排序类中再实现。
public
constructor Create(Box: TPaintBox; var SortArray: array of Integer);//就是构造函数吧,用来初始化类的各个成员。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哀酱April
2011-09-11 · TA获得超过844个赞
知道大有可为答主
回答量:2245
采纳率:0%
帮助的人:820万
展开全部
设置一个全局变量:var fstop:boolean;
procedure TForm1.btn1Click(Sender: TObject);
begin
.........
if fstop then exit;
................
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
fstop:=true
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式