Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   C# Timer zu langsam (https://www.delphipraxis.net/53162-timer-zu-langsam.html)

faux 11. Sep 2005 14:37


Timer zu langsam
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Ich habe folgenden Code geschrieben, um alle Möglichkeiten zwischen A und ZZZZZZ zu bekommen:

Code:
[color=blue]char[/color][] valueString;
[color=blue]int[/color] count = 0;
Code:
valueString[count]++;
[color=blue]if[/color] (valueString[count] > [color=darkred]'Z'[/color])
{
  valueString[count] = [color=darkred]'A'[/color];
  [color=blue]if[/color] (count != 0)
    [color=blue]for[/color] ([color=blue]int[/color] i = count - 1; i >= 0; i--)
    {
      valueString[i]++;
      [color=blue]if[/color] (valueString[i] <= [color=darkred]'Z'[/color])
        [color=blue]break[/color];
      else
        valueString[i] = [color=darkred]'A'[/color];
      [color=blue]if[/color] (i == 0)
        count++;
    }
  else
  {
    valueString[0] = [color=darkred]'A'[/color];
    count++;
  }
}
.
Der 2. Teil ist in einem Timer, um eine Ausgabe zu erzeugen, welche ich in einer Schleife nicht hätte.
Jedoch ist das Programm sehr langsam (siehe Anhang). Das Intervall ist jedoch bereits auf 1. Wie kann ich das beschleunigen?
Liegt es am Algorithmus, am Timer oder an etwas anderem?
Ich habe übrigens den System.Windows.Forms.Timer genommen. Wäre der System.Timers.Timer besser?

Danke schon mal.
Grüße
Faux

Luckie 11. Sep 2005 14:42

Re: Timer zu langsam
 
Zitat:

Zitat von faux
Der 2. Teil ist in einem Timer, um eine Ausgabe zu erzeugen, welche ich in einer Schleife nicht hätte.

Welches ist bei dir der zweite Teil? Und warum kannst du in einer Schleife nichts ausgeben? :gruebel:

Zitat:

Das Intervall ist jedoch bereits auf 1.
Unter Windows NT ff. hat ein normaler Timer eine maximale Auflösung von 10 ms, unter ConsumerWindows gar nur ca. 40 ms. Ich denke, das wird beim Framework nicht anders sein.

Zitat:

Liegt es am Algorithmus, am Timer oder an etwas anderem?
Warum ein Timer um Gottes Willen?

faux 11. Sep 2005 14:49

Re: Timer zu langsam
 
Wenn ich schreibe
Code:
for (int i = 0; i <= 100; i++)
{
  textBox1.Text += ( i.ToString() );
}
Dann sieht man erst nach Ablauf der Schleife das Ergebnis.


Zitat:

Zitat von Luckie
Welches ist bei dior der zweite Teil? Und warumn kannst du in einer Schleife nichts ausgeben? Grübelnd...

Ich habe einen kurzen und einen langen Code-Teil gepostet. Der lange ist der zweite Teil.

Luckie 11. Sep 2005 14:53

Re: Timer zu langsam
 
Zitat:

Zitat von faux
Wenn ich schreibe
Code:
for (int i = 0; i <= 100; i++)
{
  textBox1.Text += ( i.ToString() );
}
Dann sieht man erst nach Ablauf der Schleife das Ergebnis.

Das wird daran liegen, dass du deinem Fenster gar nicht die Chance gibst sich selber neu zu zeichnen. Rufe mal nach der Ausgabe das .NET Äquivalent zu TEdit.Refresh oder TEdit.Repaint auf.

faux 11. Sep 2005 14:58

Re: Timer zu langsam
 
Ja, mit Refresh hab ichs auch schon probiert. Geht leider auch nicht.
Jedoch liegts wirklich am Timer.
Ich hab grad eine equivalente Konsolenanwendung dazu geschrieben, jedoch mit einer for-Schleife.
Das funktioniert perfekt.

Ja du hast recht. Es liegt daran, dass sich das Textfeld nicht aktualisieren kann.

Luckie 11. Sep 2005 15:00

Re: Timer zu langsam
 
Das muss gehen mit Refresh oder Repaint oder was es da unter .NET eben gibt. So was hab eich noch nie mit eibnem Timer gelöst, geschweigen denn schon mal so gelöst gesehen. :roll:

faux 11. Sep 2005 15:05

Re: Timer zu langsam
 
Ich wollte es ja auch nur mit einem Timer machen, da ich bei for keine Ausgabe bekam (jetzt weiß ich woran es liegt).

Mit textBox1.Refresh(); gings jetzt (keine Ahnung, wieso es vorher nicht ging. Ich habe es vor der Timer-Möglichkeit ausprobiert...)...

Danke für die Hilfe.

EIne Frage noch:
Ich will einen STOP-Button einbauen. Wie kann ich das realisieren?

Luckie 11. Sep 2005 15:08

Re: Timer zu langsam
 
Nimm eine globale boolean Variable bzw. privat für die Klasse: bCancel: Boolean = False; Setze sie mit der Schaltfläche auf True und frag sie in der Schleife ab. Das macht es aber erforderlich, dass das fenster seine Nachrichtenschleife abarbeitet. Du brauchst also ein .NEt Äquivalent zu Application.Processmessages.

Eleganter geht es natürlcih mit Threads. Und es wäre die Frage, ob diese nicht benutzen sollte.

faux 11. Sep 2005 15:14

Re: Timer zu langsam
 
OK, danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 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