Autor Beitrag
david_007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win XP
Delphi
BeitragVerfasst: 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 user profile iconChristian S.: Topic aus Multimedia / Spiele / Grafik verschoben am Mo 18.07.2005 um 21:18
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 18.07.05 20:20 
Dsa liegt bestimmt nicht daran, dass dein Programm zu schnell ist. :roll:
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 18.07.05 20:29 
user profile iconLuckie hat folgendes geschrieben:
Dsa liegt bestimmt nicht daran, dass dein Programm zu schnell ist. :roll:


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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 18.07.05 20:32 
user profile iconTilman 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 18.07.05 20:35 
user profile iconChristian S. hat folgendes geschrieben:
user profile iconTilman 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win XP
Delphi
BeitragVerfasst: Mo 18.07.05 20:46 
Erstmal Danke für die Antworten.
Wie kan ich das bei einer Schleife einbauen? Oder geht das so?

ausblenden 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 user profile iconChristian S.: Delphi-Tags hinzugefügt.
Tobias1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 454

Win 98, XP Prof
D3 Prof, D2005 Prof
BeitragVerfasst: 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) :wink:

_________________
Auch das schlechteste Buch hat seine gute Seite: die letzte. (John Osborne)
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win XP
Delphi
BeitragVerfasst: Mo 18.07.05 20:55 
Hab macht eigentlich der Befehl "Application.ProcessMessages;" genau?
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 454

Win 98, XP Prof
D3 Prof, D2005 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Mo 18.07.05 20:58 

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
form1.update;					
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mo 18.07.05 21:20 
user profile icondavid_007 hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  
while Zahl1 < Zahl2 do   
begin   
randomize;   
Zahl1 := random(100);   
Zahl2 := random(100);   
sleep(1);   
end;

wusstest du eigentlich, dass man randomize nur EINMAL in einem programm starten sollte ? also z.b. im oncreate des formulars. wenn du das berücksichtigst, stürzt dein programm vielleicht auch nicht mehr ab

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win XP
Delphi
BeitragVerfasst: 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$
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 53



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 19.07.05 07:47 
user profile icondavid_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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win XP
Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 31

Windows 2K XP

BeitragVerfasst: 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