解决方案 »
- fastreport iff语句报错
- 又出错了,烦死了。。。
- 如何调用已有的WSDL开发webservice程序(用delphi7)/如何在webservice中用ADOquery保存数据到数据库?
- 请问IE和Maxthon的弹出窗口拦截是如何实现的?!
- 娃哈哈,中了五百万!!!!
- 急救啊(在线等) 日期和时间怎么混在一块?
- (三层数据库出错信息)Record not found or changed by another user
- ====高分求解:如果编程实现 Edit1.Text := #127; ?????
- 用delphi怎样创建表的数字型字段
- 三层结构下ClientDataSet的Locate方法的古怪问题
- 程序启动后立即运行,执行完成后,自动退出?
- 求助--------关于程序传入参数运行的问题
begin
ps1.StepBy(1);
end;constructor TMyThread2.Create(parent: TProgressBar);
begin
ps1 := parent;
inherited Create(False);
end;procedure TMyThread2.Execute;
begin
ps1.Max := L;
for i := 1 to ps1.Max do
begin
if Terminated then
Break;
synchronize(calt);
end;
end;
{ TMyThread2 }procedure TMyThread2.calt;
begin
ps1.StepBy(1);
end;constructor TMyThread2.Create(parent: TProgressBar);
begin
ps1 := parent;
inherited Create(False);
end;procedure TMyThread2.Execute;
begin
ps1.Max := L;
for i := 1 to ps1.Max do
begin
Sleep(10);//要加上Sleep,否则会CPU 100%
if Terminated then
Break;
synchronize(calt);
end;
end;
单个的话,可以加sleep
先定义一个消息
WM_MyMessage=WM_USER+2000;
定义一个进度的变量
app_Position:Integer;
窗体接收这个消息
public
procedure OnWM_MyMessage(var mes:tmessage);message WM_MyMessage;
begin
ProgressBar1:=app_Position;
end;//将窗体的 Handle 在创建线程里给传入,线程里执行
procedure TMyThread2.Execute;
begin
while true do
begin
//执行要完成的工作,
inc(app_Position);
postmessage(formHandle,WM_MyMessage,0,0);
sleep(100); //如果感觉太快或太慢,可以调整
end;
end;也可以不用消息,窗体上放一个定时器,每一秒去刷新一下进度条的值
其实用定时器的方式最简单,也不至于一下就到头了。
synchronize是将过程加载到主线程执行。
你这里的calt过程这样写,明显将耗时的循环在主线程执行了,肯定会使界面卡死,CPU占用高的。