Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: CPU Fresser beim Warten auf ein Flag - Lösung ?

  Alt 21. Dez 2006, 23:52
Warum übergibst du denn um Gottes Willen einen Boolean Zeiger? Und warum übergibst du deiner Prozedur das ChekcBox Objekt? Was soll die damit anfangen? Bitte mal etwas selber nachdenken. Flag muss ausserdem global sein, wie willst du es sonst setzen, wenn er in der Schleife ist?

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    Flag: Boolean;
    procedure WaitForFlag(TimeOutSeconds: DWORD = 10);
  public
    { Public-Deklarationen }
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

procedure TForm1.WaitForFlag(TimeOutSeconds: DWORD = 10);
var
  EndTime : DWORD;
begin
  Flag := True;
  EndTime := GetTickCount + TimeOutSeconds * 1000;

  while (Flag = True) and (GetTickCount < EndTime) do
  begin
    Sleep(1);
    Application.ProcessMessages;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Flag := True;
  WaitForFlag;
  Label1.Caption := 'Done ...';
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Flag := False;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Flag := not CheckBox1.Checked;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat