Thema: Delphi thread

Einzelnen Beitrag anzeigen

Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#15

Re: thread

  Alt 1. Aug 2006, 17:51
@ xaromz

vielen dank, jetzt komme ich langsam vorwärts, habe deinen code auch schon etwas verändert und erweitert sowie einen neuen thread erstellt, jetzt stellt sich aber die frage warum eine standardfunktion wie strtoint oder inttostr nicht funktioniert, bekomme da nur undefinierter bezeichner

so schaut dein kompletter umgebauter democode jetzt aus

Delphi-Quellcode:
unit Unit1;

interface

uses
  Forms, StdCtrls, Classes, Controls, ComCtrls;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Button1: TButton;
    ProgressBar2: TProgressBar;
    Button2: TButton;
    Edit1: TEdit;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses
  Windows, Dialogs;

{$R *.dfm}

{ TMyThread }

// Thread 1 START Thread 1 START Thread 1 START Thread 1 START
// Thread 1 START Thread 1 START Thread 1 START Thread 1 START
// Thread 1 START Thread 1 START Thread 1 START Thread 1 START
// Thread 1 START Thread 1 START Thread 1 START Thread 1 START
type
  Thread_Nr_01 = class(TThread)
    PB: TProgressBar;
    procedure Hauptprogramm;
    procedure Execute; override;
  end;

procedure Thread_Nr_01.Execute;
begin
  while not Terminated do begin
    Synchronize(Hauptprogramm); // Zugriff auf VCL-Elemente synchronisieren
    Sleep(10); // etwas warten VCLSync
  end;
end;

procedure Thread_Nr_01.Hauptprogramm;
var zahlenwert : integer;
begin
  // Fertig?
  if PB.Position < PB.Max then PB.StepIt // Progressbar weiter
  else Terminate; // Thread beenden
end;

// Button 1 Click
procedure TForm1.Button1Click(Sender: TObject);
var Th: Thread_Nr_01;
begin
  ProgressBar1.Position := 0; // ProgressBar 1 auf Null setzen
  Th := Thread_Nr_01.Create(True); // Thread erzeugen (suspended)
  Th.FreeOnTerminate := True; // Thread gibt sich selbst frei
  Th.PB := ProgressBar1; // Progressbar 1 zuweisen
  Th.Resume; // Thread starten
  ShowMessage('Thread für PB1'); // Message anzeigen, Thread läuft weiter
end;

// Button 2 Click
procedure TForm1.Button2Click(Sender: TObject);
var Th: Thread_Nr_01;
begin
  ProgressBar2.Position := 0; // ProgressBar 2 auf Null setzen
  Th := Thread_Nr_01.Create(True); // Thread erzeugen (suspended)
  Th.FreeOnTerminate := True; // Thread gibt sich selbst frei
  Th.PB := ProgressBar2; // Progressbar 2 zuweisen
  Th.Resume; // Thread starten
  ShowMessage('Thread für PB2'); // Message anzeigen, Thread läuft weiter
end;

// Thread 2 START Thread 2 START Thread 2 START Thread 2 START
// Thread 2 START Thread 2 START Thread 2 START Thread 2 START
// Thread 2 START Thread 2 START Thread 2 START Thread 2 START
// Thread 2 START Thread 2 START Thread 2 START Thread 2 START
type
  Thread_Nr_02 = class(TThread)
    procedure Hauptprogramm;
    procedure Execute; override;
  end;

procedure Thread_Nr_02.Execute;
begin
  while not Terminated do begin
    Synchronize(Hauptprogramm); // Zugriff auf VCL-Elemente synchronisieren
    Sleep(10); // etwas warten VCLSync
  end;
end;

procedure Thread_Nr_02.Hauptprogramm;
var zahlenwert : integer;
begin
  zahlenwert := 0;
  zahlenwert := StrToInt(Form1.Edit1.Text);
  if zahlenwert < 10 then begin
    Form1.Edit1.Text := intotostr(zahlenwert + 1);
    //Form1.Edit1.Text := '1';
  end;

  Terminate; // Thread beenden
end;

// Button 3 Click
procedure TForm1.Button3Click(Sender: TObject);
var Th: Thread_Nr_02;
begin
  Th := Thread_Nr_02.Create(True); // Thread erzeugen (suspended)
  Th.FreeOnTerminate := True; // Thread gibt sich selbst frei
  Th.Resume; // Thread starten
end;

end.
Jens
  Mit Zitat antworten Zitat