| Autor |
Beitrag |
david_007
      
Beiträge: 19
Win XP
Delphi
|
Verfasst: Mo 18.07.05 20:17
Hallo
Kann ich in ein Programm eine Geschwindikeitssperre einbauen? Ich hab nämlich ein Programm für Warscheinlichkeitsrechnungen gemacht und da Schmirrt dann manchmal der Computer ab.
David_007 Moderiert von Christian S.: Topic aus Multimedia / Spiele / Grafik verschoben am Mo 18.07.2005 um 21:18
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 18.07.05 20:20
Dsa liegt bestimmt nicht daran, dass dein Programm zu schnell ist. 
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 18.07.05 20:29
Luckie hat folgendes geschrieben: | Dsa liegt bestimmt nicht daran, dass dein Programm zu schnell ist.  |
kommt darauf an.. bei bestimmten Api-Funkionen ist es mir auch schon passiert das der Computer "nicht mehr nachkam".
sleep(1) sollte die Prozeduren einigermaßen abbremsen, reicht es nicht nimm sleep(2) usw.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 18.07.05 20:32
Tilman hat folgendes geschrieben: | bei bestimmten Api-Funkionen ist es mir auch schon passiert das der Computer "nicht mehr nachkam".
sleep(1) sollte die Prozeduren einigermaßen abbremsen, reicht es nicht nimm sleep(2) usw. |
Da ist wohl ein Aufrufen von Application.ProcessMessages; in einem für das System und das Programm akzeptablen Häufigkeit eher zu empfehlen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 18.07.05 20:35
Christian S. hat folgendes geschrieben: | Tilman hat folgendes geschrieben: | bei bestimmten Api-Funkionen ist es mir auch schon passiert das der Computer "nicht mehr nachkam".
sleep(1) sollte die Prozeduren einigermaßen abbremsen, reicht es nicht nimm sleep(2) usw. | Da ist wohl ein Aufrufen von Application.ProcessMessages; in einem für das System und das Programm akzeptablen Häufigkeit eher zu empfehlen. |
Also ich hab jetzt leider grade nicht parat bei welchen Funktionen das war, aber mit processMessages hatte das nix zu tun, ich glaube es wurde sogar schlimmer je öfter PM ausgeführt wurde. Mit sleep ließ sich das Problem damals aber beheben.
|
|
david_007 
      
Beiträge: 19
Win XP
Delphi
|
Verfasst: Mo 18.07.05 20:46
Erstmal Danke für die Antworten.
Wie kan ich das bei einer Schleife einbauen? Oder geht das so?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| while Zahl1 < Zahl2 do begin randomize; Zahl1 := random(100); Zahl2 := random(100); sleep(1); end; |
David_007
Moderiert von Christian S.: Delphi-Tags hinzugefügt.
|
|
Tobias1
      
Beiträge: 454
Win 98, XP Prof
D3 Prof, D2005 Prof
|
Verfasst: Mo 18.07.05 20:49
Ja.
Tipp:
Mach in Zukunft immer "Delphi-Tags" [delphi] um deinen Code, damit es übersichtlicher wird. (Oben; unter Schriftfarbe) 
_________________ Auch das schlechteste Buch hat seine gute Seite: die letzte. (John Osborne)
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 18.07.05 20:51
Ehrlichgesagt, wenn das die Prozedur ist die du meinst, dann solltest du doch besser application.processMessages versuchen... sleep sorgt nur dafür das alles noch länger dauert.
Abgesehen davon: sleep lässt das Programm für millisekunden stoppen, sleep(1) also für 1 ms. Wo dus einsetzt bleibt dir also überlassen, aber wie gesagt: in diesem Fall probier lieber ProcessMessages.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| while Zahl1 < Zahl2 do begin randomize; Zahl1 := random(100); Zahl2 := random(100); application.ProcessMessages; end; |
|
|
david_007 
      
Beiträge: 19
Win XP
Delphi
|
Verfasst: Mo 18.07.05 20:55
Hab macht eigentlich der Befehl "Application.ProcessMessages;" genau?
|
|
Alstar
      
Beiträge: 827
|
Verfasst: Mo 18.07.05 20:57
Er macht, dass Deine Anwendung Zeit bekommt, um Befehle und Nachrichten, die von Windows an dein Programm geschickt wurden, abzuarbeiten.
Alstar
|
|
Tobias1
      
Beiträge: 454
Win 98, XP Prof
D3 Prof, D2005 Prof
|
Verfasst: Mo 18.07.05 20:57
Er reagiert z.B auf Eingaben (Maus, Tastatur).
_________________ Auch das schlechteste Buch hat seine gute Seite: die letzte. (John Osborne)
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mo 18.07.05 20:58
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 18.07.05 21:17
Wenn das Problem nur ist das das Programm nicht mehr zu reagieren scheint, könnte ein Aufruf von update schneller sein. Der sorgt dafür das die Grafik (z.B. ein Label oder eine ProgressBar) angezeigt wird.
Delphi-Quelltext
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mo 18.07.05 21:20
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 18.07.05 21:34
jetzt wird auch klar warum dein programm "zu schnell" ist! Das hätte mir auch auffallen müssen! Es werden stets mehrmals hintereinander die selben Zufallszahlen erzeugt, da der Generator merhmals mit derselben Systemzeit initialisiert wird. Randomize in OnCreate, und alles wird gut!
|
|
david_007 
      
Beiträge: 19
Win XP
Delphi
|
Verfasst: Di 19.07.05 05:19
Nein das wird nicht gehen. Bei dem Programm werden bei Buttondruch zwei zufallszahlen erzeugt. Delphi probiert das so lange bis beide Zahlen gleich Groß sind und zählt gleichzeitig die Versuche mit.
|
|
Diabele$
      
Beiträge: 53
|
Verfasst: Di 19.07.05 07:18
Dann werde ich das mal versuchen so zu erklären, wie es unser Infolehrer damals gemacht hat:
Stell dir vor, dass alle Zufallszahlen auf einem großen Rad liegen würden, ähnlich einem Glücksrad.
randomize dreht das Rad an, und es dreht sich unendlichlange weiter (da es hier mal keine Reibung gibt). Mit random() wird dann einfach die zahl ermittelt, welche sich bei dem Rad grade "oben" befindet. Man muss das Rad also nicht immer wieder neu andrehen.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 19.07.05 07:47
david_007 hat folgendes geschrieben: | | Nein das wird nicht gehen. Bei dem Programm werden bei Buttondruch zwei zufallszahlen erzeugt. Delphi probiert das so lange bis beide Zahlen gleich Groß sind und zählt gleichzeitig die Versuche mit. |
Dann kansst du das "Randomize" aber mindestens VOR die Schleife schreiben. Im OnCreate sit es aber bestens aufgehoben. Dann kannst du es nicht vergessen und der Generator ist auf jeden Fall initialisiert.
|
|
david_007 
      
Beiträge: 19
Win XP
Delphi
|
Verfasst: Di 19.07.05 12:12
Danke wusste das nicht, es steht auch nichts in Delphi für Kids darüber.
Edit: Hab es mal ausprobiert das randomize bei OnCreate einzufügen, funktioniert sehr gut.(Jetzt kommen irgendwie ganz andere Ergebnisse als vorher raus.)
|
|
HeuteEinKoenig
      
Beiträge: 31
Windows 2K XP
|
Verfasst: Do 04.08.05 13:43
Wennsse aber nur einmal in der Applikation Randomize benutzt, dann haste auch nur einmal einen Startwert gesetzt und alle weiteren "Zufalls"-zahlen sind (mehr oder weniger) davon abhängig und nicht mehr so arg randomized. Probier das mal aus, in dem Du dir eine Reihe von 100 Zahlen über eine schleife bilden läßt bei der Du nur einmalig vor der Schleife Randomize benutzt hast, oder bei der Du in jedem Durchlauf Randomize benutzt. Da ist schon ein Unterschied. Wie schon richtig gesagt bestimmt Randomize einen neuen Startwert, auf den die anderen Randoms dann aufsetzen. Sollen die Zahlen wirklich gewürfelt sein, würde ich IMMER und in JEDEM Schleifendurchlauf Randomize setzen, da Random ansonsten nur vom Startwert und der von da an vergangenenzeit abhängt und berechnet wird. Ist also nix mit Zufall ohne Randomize.
_________________ Ein Mensch erblickt das Licht der Welt, doch bald hat sich herausgestellt
in manchem trüb verbrachten Jahr, das dies der einzige Lichtblick war
|
|