Autor |
Beitrag |
Hendi48
      
Beiträge: 271
|
Verfasst: Di 10.07.07 20:09
Hi,
also ich hab das in meinem Programm:
Delphi-Quelltext 1: 2: 3:
| reconnect; sleep(strtoint(form2.Edit1.text)); sammeln; |
Wie schon in den Kommentaren steht, funktioniert das Sleep nicht. Wenn ich mir den Wert mal in einem Label anzeigen lasse (strtoint dann wieder inttostr), zeigt er 2000. Kann es sein das die Zahl in Integer anders ist oder so?
Zuletzt bearbeitet von Hendi48 am Di 10.07.07 20:47, insgesamt 1-mal bearbeitet
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 10.07.07 20:23
Hast du dich hier verschrieben, oder liegt der Fehler einfach an einer fehlenden 0? 20 Sekunden sind 20.000ms, nicht 2000ms.
_________________ We are, we were and will not be.
|
|
Hendi48 
      
Beiträge: 271
|
Verfasst: Di 10.07.07 20:41
ohw ja da hab ich was verdreht..ich dachte immer 100ms = 1s
Danke für die Hilfe
Edit:
Hm, das geht aber trotzdem macht er etwas was erst nach dem sleep kommt zuerst O_o
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure tform3.formsammel; var int: integer; begin sammeln; label1.Caption:='1'; sammeln; label1.Caption:='2'; sammeln; label1.Caption:='3'; reconnect; sleep(strtoint(form2.Edit1.text)); sammeln; int:=strtoint(label1.Caption); int:=int+1; label1.caption:=inttostr(int); end; |
nach jedem sammel soll label1 ein hoch gehn, aber es geht auf 4 und dann sleept er erst
Zuletzt bearbeitet von Hendi48 am Di 10.07.07 20:49, insgesamt 1-mal bearbeitet
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Di 10.07.07 20:49
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
Hendi48 
      
Beiträge: 271
|
Verfasst: Di 10.07.07 20:58
Ich komm erst in die 8. jetz und da hatten wir sowas noch nich, aber warum wir ms noch nich hatten weiß ich auch nich..
Oben hab ich editiert!
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 10.07.07 22:06
Moin!
Hendi48 hat folgendes geschrieben: | Hm, das geht aber trotzdem macht er etwas was erst nach dem sleep kommt zuerst O_o
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure tform3.formsammel; var int: integer; begin sammeln; label1.Caption:='1'; sammeln; label1.Caption:='2'; sammeln; label1.Caption:='3'; reconnect; sleep(strtoint(form2.Edit1.text)); sammeln; int:=strtoint(label1.Caption); int:=int+1; label1.caption:=inttostr(int); end; |
nach jedem sammel soll label1 ein hoch gehn, aber es geht auf 4 und dann sleept er erst |
Du hast da zwei Sachen drin, die ich anders machen würde:
1. Du solltest besser GETTICKCOUNT und eine repeat-Schleife mit Timeout nehmen, statt Sleep!
2. Der Code da oben ist nicht ereignisorientiert - aber das Programm schon (weil jedes TApplication-basierte Programm ereignisorientiert ist)! Hier gibt´s was aus der FAQ dazu.
Konkret zu dem aktuellen "Fehlverhalten" (was übrigens keines ist, wenn man den Hintergrund verstanden hat): Mach mal nach dem Ändern der Label-Caption ein Application.ProcessMessages;dann haste auch die Ausgabe.
PS: Wenn man Code einrückt, muss man nicht sofort sterben...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Hendi48 
      
Beiträge: 271
|
Verfasst: Di 10.07.07 22:27
ok danke ich habs jetz so gemacht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm3.SammelManager; var int: integer; begin sammeln; label1.Caption:='1'; sammeln; label1.Caption:='2'; sammeln; label1.Caption:='3'; reconnect; Delay(22000); Application.Processmessages; sammeln; int:=strtoint(label1.Caption); int:=int+1; label1.caption:=inttostr(int); end; |
Ich mach noch ein 5. und 6. dazu und kuck ob es geht..
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Mi 11.07.07 00:36
Wenn man den Code so wie du einrückt kann man aber sehr schwehr Krank werden. Zwei Zeichen pro Ebene, nicht mehr und nicht weniger sind voll ok.
Die Verwendung von Delay sollte verboten werden. Frage mich eh wozu man das braucht.
Ich mache mal das was man eigentlich nicht machen sollte, ich schreibe Code: (in schönschrift)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm3.SammelManager; var int, l: integer;
begin for l := 1 to 3 do begin sammeln; label1.Caption := IntToStr(l); Application.Processmessages; end; reconnect; for l := 1 to 22 do begin Sleep(1000); Application.Processmessages; end;
sammeln; int := StrToInt(label1.Caption); Inc(int); label1.caption := IntToStr(int); end; |
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 11.07.07 00:46
Moin!
@ Sinspin: Dein Code ist zwar besser strukturiert, als der von Hendi48, aber auch nicht ereignisorientiert und deshalb konzeptionell nicht besser.
Das Ganze gehört in einen Timer mit z.B. 1000ms Intervall und über einen Zustand gesteuert.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Hendi48 
      
Beiträge: 271
|
Verfasst: Mi 11.07.07 00:52
egal, mein code funktioniert gut und da muss ich auch nix mehr ändern
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Mi 11.07.07 16:02
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|