AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads: Verständnisproblem!?

Ein Thema von Nightjacket · begonnen am 5. Mär 2013 · letzter Beitrag vom 6. Mär 2013
 
Benutzerbild von Nightjacket
Nightjacket

Registriert seit: 28. Feb 2013
7 Beiträge
 
Delphi 7 Professional
 
#1

Threads: Verständnisproblem!?

  Alt 5. Mär 2013, 11:57
Hallo,

ich habe mir ein kleines Programm gebastelt, in dem es mir lediglich darum ging, das Verhalten eines Threads auszuprobieren. Leider tut das Programm nicht was ich will.

Geplant ist es wie folgt (siehe Anhang UI):
Ich möchte einen Startbutton drücken. In dem Moment soll der Thread starten und die Caption eines Labels im Sekundentakt hochzählen (also quasi wie ein kleiner Timer). Diese Anzeige dient lediglich dazu, zu sehen wie der Thread läuft. Parallel dazu möchte ich jetzt, noch während der Thread läuft, einen zweiten Button "Ändern" drücken, der die Caption eines zweiten Labels zwischen "Eins" und "Zwei" ändert.

Quellen dazu:

Unit1:
Delphi-Quellcode:
unit ThreadTest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2;

type
  TForm1 = class(TForm)
    lbl1: TLabel;
    btn1: TButton;
    btn2: TButton;
    lbl2: TLabel;
    procedure btn2Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    MyThread: TMyThread;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn2Click(Sender: TObject);
begin
  if lbl2.Caption = 'Einsthen begin
    lbl2.Caption := 'Zwei';
  end
  else begin
    lbl2.Caption := 'Eins';
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  if btn1.Caption = 'Startthen begin
    btn1.Caption := 'Stop';
    MyThread.Execute;
  end
  else begin
    btn1.Caption := 'Start';
    MyThread.Terminate;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyThread := TMyThread.Create(True);
  MyThread.FreeOnTerminate := True;
end;

end.
Unit2:
Delphi-Quellcode:
unit Unit2;

interface

uses
  classes, StdCtrls, SysUtils;

type
  TMyThread = class(TThread)
    procedure Execute; override;
  public
  end;

implementation
uses
  ThreadTest;

procedure TMyThread.Execute;
var
  num: Integer;
begin
  while (not terminated) do begin
    num := StrToInt(ThreadTest.Form1.lbl1.Caption);
    Inc(num, 1);
    ThreadTest.Form1.lbl1.Caption := IntToStr(num);
    Sleep(800);
    ThreadTest.Form1.lbl1.Refresh;
  end;
end;

end.
Wie gesagt, das ganze dient nur als Test, weitere Aktionen ausführen zu können, während ein Thread nebenher andere Dinge tut (eben so wie das Ganze gedacht ist).
Leider blockiert mein Programm nach dem Starten des Threads, wie eine Endlosschleife und ich kann weder den Button "Ändern", noch den Stop-Button drücken. Ich wäre sehr dankbar, wenn mir jemand meinen Fehler aufzeigen und auch erklären kann!

Mit freundlichen Grüßen
Nightjacket
Angehängte Grafiken
Dateityp: jpg UI_Thread.jpg (35,7 KB, 14x aufgerufen)
Probleme sind da, um sich zu vermehren!
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz