Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   setsame Zahlen (https://www.delphipraxis.net/116176-setsame-zahlen.html)

clock50 24. Jun 2008 17:14


setsame Zahlen
 
Ich habe hier eine Simulation die wenn sie komplett durchläuft keine Probleme macht. Aber ich habe jetzt um die einzelnen Auswertungen zu sehen einen Timer dazwischen der jede Sekunde einen neuen Wert holt. Um das zu unterbrechen habe ich einen button der true setzt und den Timer stopt. Nach ein paar duchläufen ist der Wert plötzlich true ohne das ich eine Erklärung dafür finden kann. Nun habe ich mir gedacht das irgendwas mit dem STACK nicht io ist. Denn andere Werte spinnen auch. Kann das sein, das das mit dem Timer zu tun hat der irgendwie werte sichert und wieder zurückschreibt (Register)?

Cyf 24. Jun 2008 17:19

Re: setsame Zahlen
 
So ist das munteres Raten, bitte zeig mal die Procedure, wo es Probleme gibt und falls du Fehlermeldungen oder Exceptions erhälst gib diese an. Ich weiß auch grad nicht ob der Timer in einem eigenen Thread läuft, aber ich halts für recht wahrscheinlich, so das du auch eventuell threadunsichere Dinge aufrufen könntest. Eine fehlerhafte Auswirkung auf die Register ist bei korrekter Verwendung eigentlich sehr unwahrscheinlich, im Zweifelsfall kannst du ja mal einen Debuglauf machen und die Registerwerte im Auge behalten.

clock50 24. Jun 2008 17:50

Re: setsame Zahlen
 
Delphi-Quellcode:
procedure TForm1.JvTimer1Timer(Sender: TObject);
begin
inc(zaehler);
  Label31.Caption := '';
  vorbereiten1;
  if stope = 1 Then Label31.Caption := Label31.Caption+'1' else Label31.Caption := Label31.Caption+'0';
  For c := a to zaehler do werteaus1;
//--------------------------------------------- 
  if stope = 1 Then Label31.Caption := Label31.Caption+'1' else Label31.Caption := Label31.Caption+'0';
  zeigean1;
  if stope = 1 Then Label31.Caption := Label31.Caption+'1' else Label31.Caption := Label31.Caption+'0';
  vorbereiten2;
  if stope = 1 Then Label31.Caption := Label31.Caption+'1' else Label31.Caption := Label31.Caption+'0';
  For c := a to zaehler do werteaus2;
  if stope = 1 Then Label31.Caption := Label31.Caption+'1' else Label31.Caption := Label31.Caption+'0';
  zeigean2;
  if stope = 1 Then Label31.Caption := Label31.Caption+'1' else Label31.Caption := Label31.Caption+'0';
  Label4.Caption := inttostr(zaehler);
  if zaehler >= Length(zzahl)-2 Then stope := 1;
  if stope = 1 Then
   begin
   JvTimer1.Enabled := False;
   Button1.Enabled := True;
   Button2.Enabled := True;
   Button3.Enabled := True;
   Button4.Enabled := True;
   Button5.Enabled := False;
   end;
end;
Da wo die Markierung ist "stope" nach x durchläufen 1 oder mit anderen Werten (werteliste) an anderen Stellen aber der aktuelle wert ist nicht gleich! Label31 ist zur kontrolle. Ich denke es ist ein Überlauf oder so.
Auch wenn "Stope" Boolean ist ist das so.

Klaus01 24. Jun 2008 18:04

Re: setsame Zahlen
 
Hallo,

wird der Wert von "stope" in den Prozeduren "vorbereiten1", "werteaus1"
und "zeigean1" verändert?

Wo wird zaehler und stope initialisiert?

Grüße
Klaus

Delphi-Quellcode:
procedure TForm1.JvTimer1Timer(Sender: TObject);
begin
  inc(zaehler);

  Label31.Caption := '';

  vorbereiten1;

  if stope = 1 Then
    Label31.Caption := Label31.Caption+'1'
  else
    Label31.Caption := Label31.Caption+'0';

  For c := a to zaehler do
    werteaus1;
//---------------------------------------------
  if stope = 1 Then
    Label31.Caption := Label31.Caption+'1'  // hier willst Du doch nicht addieren oder?
  else
    Label31.Caption := Label31.Caption+'0';

  zeigean1;

  if stope = 1 Then
    Label31.Caption := Label31.Caption+'1'
  else
    Label31.Caption := Label31.Caption+'0';
  vorbereiten2;

  if stope = 1 Then
    Label31.Caption := Label31.Caption+'1'
  else
    Label31.Caption := Label31.Caption+'0';

  For c := a to zaehler do
    werteaus2;

  if stope = 1 Then
    Label31.Caption := Label31.Caption+'1'
  else
    Label31.Caption := Label31.Caption+'0';

  zeigean2;

  if stope = 1 Then
    Label31.Caption := Label31.Caption+'1'
  else
    Label31.Caption := Label31.Caption+'0';

  Label4.Caption := inttostr(zaehler);

  if zaehler >= Length(zzahl)-2 Then
    stope := 1;
  if stope = 1 Then
    begin
      JvTimer1.Enabled := False;
      Button1.Enabled := True;
      Button2.Enabled := True;
      Button3.Enabled := True;
      Button4.Enabled := True;
      Button5.Enabled := False;
   end;
end;

clock50 24. Jun 2008 18:11

Re: setsame Zahlen
 
1. stope wird nur ind den beiden Proceduren geändert!

2. Die Werte werden gesetzt:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
begin
Button1.Enabled := False;
Button2.Enabled := False;
Button3.Enabled := False;
Button4.Enabled := False;
Button5.Enabled := True;
stope := 0;
zaehler := 1;
a := 1;
JvTimer1.Enabled := True;
end;
3. Das ist eine String-Addition String1+String2 = String1String2 ( "1"+"1"= 11)


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