关于for语句

fangsp 2008-10-14 10:18:24
Procedure CycleSend(F_ID : String);]
begin
for i := 0 to $FF do
begin
//执行一段代码
end;
end;

下面是依次调用上面的过程,但要执行下面这四条语句,花去的时间感觉有点长,有没有好的办法尽量减少要执行下面四条语句所需的时间啊?分不够,再加
CycleSend('2F00');
CycleSend('7F10');
CycleSend('7F20');
CycleSend('7F21');
CycleSend('7F22');
...全文
229 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerry8 2008-10-14
  • 打赏
  • 举报
回复
努力学习
fangsp 2008-10-14
  • 打赏
  • 举报
回复
僵哥
的方法也很好
僵哥 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 fangsp 的帖子:]
Procedure CycleSend(F_ID : String);]
begin
for i := 0 to $FF do
begin
//执行一段代码
end;
end;

下面是依次调用上面的过程,但要执行下面这四条语句,花去的时间感觉有点长,有没有好的办法尽量减少要执行下面四条语句所需的时间啊?分不够,再加
CycleSend('2F00');
CycleSend('7F10');
CycleSend('7F20');
CycleSend('7F21');
CycleSend('7F22');
[/Quote]
能不能一次性
CycleSend('2F007F107F207F217F22');
tjg5202 2008-10-14
  • 打赏
  • 举报
回复
ding 顶一个
fangsp 2008-10-14
  • 打赏
  • 举报
回复
那我在窗体关闭的时候怎么销毁这些线程呢??
fangsp 2008-10-14
  • 打赏
  • 举报
回复
理解了
谢谢
如果成功实现 马上结帖
jadeluo 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fangsp 的回复:]
5楼
我怎么同步 请说得清楚点
谢谢了
[/Quote]

举个例子:

type
TCycleSendThread = class(TThread)
private
F_ID : String;
procedure ShowStatus;
protected
procedure Execute; override;
public
constructor Create(Suspended: Boolean; ID: String);
end;

......

constructor TCycleSendThread.Create(Suspended: Boolean; ID: String);
begin
F_ID := ID;
inherited Create(Suspended);
end;

procedure TCycleSendThread.ShowStatus;
begin
//操作窗体的可视化界面
Form1.Memo1.Lines.Add(F_ID);
end;

procedure TCycleSendThread.Execute();
begin
for i := 0 to $FF do
begin
......
//同步调用ShowStatus方法
Synchronize(ShowStatus);
......
Sleep(1);
end;
end;

lyguo 2008-10-14
  • 打赏
  • 举报
回复
5楼的方法可以试一下

但CycleSend 中如果有窗体有关的话,还要做一下同步
fangsp 2008-10-14
  • 打赏
  • 举报
回复
5楼
我怎么同步 请说得清楚点
谢谢了
hongqi162 2008-10-14
  • 打赏
  • 举报
回复
为什么要使用for循环,传入的参数是做什么的?可不可以在for循环上做优化,这些都不知道怎么帮你?
jadeluo 2008-10-14
  • 打赏
  • 举报
回复
写成线程:


interface

.....

type
TCycleSendThread = class(TThread)
private
F_ID : String;
protected
procedure Execute; override;
public
constructor Create(Suspended: Boolean; ID: String);
end;

implementation

......

constructor TCycleSendThread.Create(Suspended: Boolean; ID: String);
begin
F_ID := ID;
inherited Create(Suspended);
end;

procedure TCycleSendThread.Execute();
begin
for i := 0 to $FF do
begin
//执行一段代码
Sleep(1);
end;
end;

......

//调用
TCycleSendThread.Create(False, '2F00');
TCycleSendThread.Create(False, '7F10');
TCycleSendThread.Create(False, '7F20');
TCycleSendThread.Create(False, '7F21');
TCycleSendThread.Create(False, '7F22');


需要注意的是,执行一段代码中,如果有操作可视化界面部分的代码,需要使用同步方法。
ka272727 2008-10-14
  • 打赏
  • 举报
回复
弄成多线程?
mygodsos 2008-10-14
  • 打赏
  • 举报
回复
你定义一个
myarry:arry[1..5] of string;

然后传myarry,一次搞掂,是不是这样
fangsp 2008-10-14
  • 打赏
  • 举报
回复
不是For语句里的问题
里面的代码没法再优化了
我的想法是如果
CycleSend('2F00');
CycleSend('7F10');
CycleSend('7F20');
CycleSend('7F21');
CycleSend('7F22');
这四条语句能同时执行就好了
但不知道怎么写语句,有相关经验的请写一下代码,如果解决
愿意再献上200分
lyguo 2008-10-14
  • 打赏
  • 举报
回复
Procedure CycleSend(F_ID : String);]
begin
for i := 0 to $FF do
begin
//执行一段代码 你执行的什么代码,关键在这儿啊
end;
end;
dyzhong 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 3150379 的回复:]
哎,不知所云
[/Quote] .
五维思考 2008-10-14
  • 打赏
  • 举报
回复
哎,不知所云
亮剑_ 2008-10-14
  • 打赏
  • 举报
回复
CycleSend('2F00');
CycleSend('7F10');
CycleSend('7F20');
CycleSend('7F21');
CycleSend('7F22');

思路可以是把这些多次调用的地方想办法移到CycleSend里面的for循环里去,其实就是“unsigned”的方法。

当然如果能够多次调用没有先后关系,可以同时执行的话多线程也是好办法

16,748

社区成员

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

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