[]-为什么这个简单多线程代码,执行后CPU好高,而且根本没有多线程的效果
[求助]--------为什么这个简单多线程代码,执行后CPU好高,而且根本没有多线程的效果?
高人帮看看,小弟刚学多线程,程序,就是要让线程和ProgressBar1里的进度同步,
问题如下:
1.但为什么一运行程序,系统都动不了了,要等运行完了才能动?
2.为什么?有时候出现程序执行完了,但进度条确在70%左右完了,或者是程序没完,进度条完了?
如何改,请问
------解决方案--------------------
需要延时吧。。10000格一下就跑完了
------解决方案--------------------
------解决方案--------------------
高人帮看看,小弟刚学多线程,程序,就是要让线程和ProgressBar1里的进度同步,
问题如下:
1.但为什么一运行程序,系统都动不了了,要等运行完了才能动?
2.为什么?有时候出现程序执行完了,但进度条确在70%左右完了,或者是程序没完,进度条完了?
如何改,请问
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
{声明多线程}
type
TMyThread2 = class(TThread)
private
ps1:TProgressBar;
public
procedure calt;
constructor Create(parent:TProgressBar);
procedure Execute;override;
end;
type
TForm2 = class(TForm)
ProgressBar1: TProgressBar;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
L=10000;
var
Form2: TForm2;
implementation
{$R *.dfm}
constructor TMyThread2.Create(parent:TProgressBar);
begin
ps1 := parent;
inherited Create(false);
end;
procedure TMyThread2.calt;
var
i:Integer;
begin
//FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
ps1.Max := L;
for i := 1 to L do
begin
ps1.StepBy(1);
end;
end;
procedure TMyThread2.Execute;
begin
synchronize(calt);
if Terminated then Exit;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
TMyThread2.Create(ProgressBar1); //调用
end;
end.
------解决方案--------------------
需要延时吧。。10000格一下就跑完了
------解决方案--------------------
{ 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
if Terminated then
Break;
synchronize(calt);
end;
end;
------解决方案--------------------