Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Sleep funktioniert nicht
Hendi48 - Di 10.07.07 20:09
Titel: Sleep funktioniert nicht
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?
Gausi - 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.
Hendi48 - Di 10.07.07 20:41
ohw ja da hab ich was verdreht..ich dachte immer 100ms = 1s :shock:
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
Hendi48 - 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 - 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! :mahn:
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 [
http://www.delphi-library.de/topic_Ohne+CPULast+auf+Ereignisse+in+Formularanwendungen+warten_67969.html]. :les: ;)
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... :roll:
cu
Narses
Hendi48 - 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 - 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; |
Narses - 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. :? :| :nixweiss:
Das Ganze gehört in einen Timer mit z.B. 1000ms Intervall und über einen Zustand gesteuert. :mahn:
cu
Narses
Hendi48 - Mi 11.07.07 00:52
egal, mein code funktioniert gut und da muss ich auch nix mehr ändern
Sinspin - Mi 11.07.07 16:02
Narses hat folgendes geschrieben: |
Moin!
@ Sinspin: Dein Code ist zwar besser strukturiert, als der von Hendi48, aber auch nicht ereignisorientiert und deshalb konzeptionell nicht besser. :? :| :nixweiss:
Das Ganze gehört in einen Timer mit z.B. 1000ms Intervall und über einen Zustand gesteuert. :mahn:
cu
Narses |
Bei einem so kleinen stückchen Quelltext, von dem ich absolut nicht weis in welchem Zusammenhang es eingesetzt wird, mache ich mir nicht so den Kopf was davon am besten in einen Timer kommt. Ich habe nur redundanzen beseitigt und einen schönen Programmierstiel demonstriert. Alles weitere überlasse ich der Lern- und Probierbereitschaft des Autors.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!