AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TTimer zur Laufzeit erstellen/entfernen

Ein Thema von Rastaman · begonnen am 20. Feb 2005 · letzter Beitrag vom 21. Feb 2005
Antwort Antwort
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#1

TTimer zur Laufzeit erstellen/entfernen

  Alt 20. Feb 2005, 19:02
Hallo allerseits
Also Folgendes.
Ich habe ein Programm welches mit einer ziemlich langen for Schleife arbeitet.
Das dumme ist natürlich jetzt, dass man die Form in der Zeit nicht kontrollieren kann bzw. überhaupt nichts machen kann.
Also hab ich mir gedacht nehm ich 100 Timer.
Folgender Code :
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    TimerArray: Array of TTimer;
    procedure Count(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Timer: TTimer;

implementation

{$R *.dfm}

procedure TForm1.Count(Sender: TObject);
begin
  Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1)
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  SetLength(TimerArray,100);
  For i := 1 to 100 do begin
    TimerArray[i] := TTimer.Create(self);
    With TimerArray[i] do begin
      Enabled := True;
      Interval := 1;
      OnTimer := Count;
    end;
  end;
  Button1.Enabled := False;
  Button2.Enabled := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
begin
  SetLength(TimerArray,100);
  For i := 1 to 100 do
    TimerArray[i].Enabled := False;
  For i := 1 to 100 do
    TimerArray[i].Free;
  Button1.Enabled := True;
  Button2.Enabled := False;
end;
Natürlich ist der Sinn nicht die Zahl im Label zu erhöhen. Die eigentlich Funktion kommt da später erst
Das Starten der Timer funktioniert wunderbar, aber wenn ich auf Stop(Button2) klicke kommt folgender Fehler:

Code:
Access Violation at Adress 00401C52 in Module 'Project2.exe'. Write of adress 004276A4
Was mach ich da falsch?
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: TTimer zur Laufzeit erstellen/entfernen

  Alt 20. Feb 2005, 19:04
Und zum wasweissichwievielten mal(): Dynamische Arrays beginnen bei 0 und gehn bis Laenge-1, also in deinem Fall von 0..99

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#3

Re: TTimer zur Laufzeit erstellen/entfernen

  Alt 20. Feb 2005, 19:06
Dabei hab ich mir das heut Mittag nochmal angeschaut
Klappt! Danke
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#4

Re: TTimer zur Laufzeit erstellen/entfernen

  Alt 20. Feb 2005, 19:50
Hi,

wenn ein Prog während einer Schleife nicht reagiert sollte man lieber Application.ProcessMessages; benutzen...

cu, sECuRE
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: TTimer zur Laufzeit erstellen/entfernen

  Alt 20. Feb 2005, 19:51
Zitat von sECuRE:
wenn ein Prog während einer Schleife nicht reagiert sollte man lieber Application.ProcessMessages; benutzen...
Das war doch ueberhaupt nicht das Problem...

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#6

Re: TTimer zur Laufzeit erstellen/entfernen

  Alt 20. Feb 2005, 21:34
Zitat von alcaeus:
Zitat von sECuRE:
wenn ein Prog während einer Schleife nicht reagiert sollte man lieber Application.ProcessMessages; benutzen...
Das war doch ueberhaupt nicht das Problem...

Greetz
alcaeus
Zitat von Gerrit89:
Das dumme ist natürlich jetzt, dass man die Form in der Zeit nicht kontrollieren kann bzw. überhaupt nichts machen kann.
Wenn die Form in einer schleife nich mehr reagiert, dann stimme ich sECuRE zu, sollte man doch besser application.processMessages verwenden...
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#7

Re: TTimer zur Laufzeit erstellen/entfernen

  Alt 20. Feb 2005, 21:42
Vor allem wenn es darum geht, nur den Status zu aktualisieren reicht das völlig aus.
Ganz davon zu schweigen davon, das 100 Timer mit einem Interval von 1 ein ganz schönes Chaos anrichten können.
Delphi-Quellcode:
for i := 1 to 12345 do
begin
  // ...
  Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1)
  Application.ProcessMessages;
end;
PS: Wenn die Schleife sehr schnell durchläuft, sollte man eventuell den Aufruf der beiden Zeilen einsschränken, z.B. etwa so:
If (i mod 10) = 0 then
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: TTimer zur Laufzeit erstellen/entfernen

  Alt 21. Feb 2005, 06:42
Zitat von Gerrit89:
Das dumme ist natürlich jetzt, dass man die Form in der Zeit nicht kontrollieren kann bzw. überhaupt nichts machen kann.
Wer lesen kann ist klar im Vorteil
Als Alternative zu Application.ProcessMessages sollte man evtl. noch einen Thread erwähnen...

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz