Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi in turbo pascal (https://www.delphipraxis.net/3945-turbo-pascal.html)

Mick 7. Apr 2003 17:48


in turbo pascal
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi,

habe in turbo pascal eine übung gemacht, mit gettime und settime. klappt von der theorie auch
gibt nur das problem das beim ausführen der *.exe die cpu an die decke geht...

hier glaub ich ist das Problem?
Zitat:

settime(h,m,s1,hun1);

warte:=random(30)+10; {zufällige wartezeit ermitteln}

repeat
gettime(h,m,s2,hun2);
until (s1+warte)=s2;
weiß es aber nicht genau...

wenn es hilft kann ich den source hier hinterlegen.

jbg 7. Apr 2003 18:35

Zitat:

(s1+warte)=s2;
Da setzt du aber eine sehr genaue Zeitmessung voraus. Was passiert, wenn s1+waret einfach den Wert s2 überspringt? Ein >= ist sicherlich besser.

Mick 7. Apr 2003 18:52

stimmt da hast du recht.

Zitat:

Da setzt du aber eine sehr genaue Zeitmessung voraus. Was passiert, wenn s1+waret einfach den Wert s2 überspringt? Ein >= ist sicherlich besser.

nur warum geht die cpu hoch bis an die 100% ?

was könnte ich den falsch gemacht haben?

Hansa 7. Apr 2003 19:05

klarer Fall für Endlosschleife. Und die CPU ist dann damit beschäftigt in die Unendlichkeit zu segeln.

Mick 7. Apr 2003 19:09

ist es die stelle?
kannst du mir kurz sagen was/wo sch.... ist?
bzw. warum.
Zitat:

Zitat von Hansa
klarer Fall für Endlosschleife. Und die CPU ist dann damit beschäftigt in die Unendlichkeit zu segeln.


Hansa 7. Apr 2003 19:15

ohhh, random (30) heißt, der Maximalwert ist 30 und plus 10 dann sinds 40. Danach passiert doch nichts mehr. Dann ist die Zeit längst rum. Ja und dann versucht die CPU die unendlichkeit zu berechnen.

woki 7. Apr 2003 19:44

Hallo,

die CPU geht deshalb auf 100% weil Du sie voll damit auslastest, so schnell wie sie kann immer wieder die Zeit abzufragen. Unter DOS (Turbo Pascal) war das auch OK, was soll die CPU da auch anderes machen.

Gruss
Wolfgang

arnoldo 7. Apr 2003 21:19

Hallo,

ich denke es liegt am folgenden:

was passiert wenn beispielsweise s1=49 sekunden und warte=12
ist? Dann wäre s1+warte > 60s und somit eine Endlosschleife!
Da s2 nie > 60 sein kann!

Das müsste klappen:

Code:
s3:=s1+warte;
if s3>59 then dec(s3,60);
repeat
 gettime(h,m,s2,hun2);
until s3=s2;
:spin:

woki 8. Apr 2003 18:39

Hallo,

du mußt hier zwei Dinge auseinanderhalten, nämlich die Gefahr einer Endlosschleife, und die CPU-Auslastung während die Schleife läuft, also hier folgendes:

Um die Endlosschleife zu vermeiden, mußt Du auf jeden Fall (in deinem ersten Posting, )

(s1+warte)=s2

ersetzen durch

(s1+warte) >= s2

Während die Schleife läuft wird die CPU aber immer auf volle Auslastung gehen,woher soll die Anwendung denn wissen, daß sie diese Schleife nicht so schnell wie möglich durchlaufen soll.

Bei einer echten Turbo Pascal (DOS) Anwendung ist das auch in Ordnung.
Bei einer Windowsanwendung würde man das Problem anders lösen.

Gruss
Wolfgang


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