amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Kurze Zeit warten [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

19.01.2005, 16:21 Uhr

Ralf27
Posts: 2779
Nutzer
Wie kann ich Systemfreundlich eine sehr kurze Zeit warten? Mit der Delay-Routine aus der Dos-Lib kann ich ja nur bis 1/50 Sekunde genau warten. Wenn ich aber noch kürzere und noch genauer warten möchte und das auch noch systemfreundlich machen möchte, wie kann ich da am besten warten? (also, nicht ich sondern das Programm. :-D )
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

19.01.2005, 16:33 Uhr

thomas
Posts: 7718
Nutzer

timer.device

Zitat:
UNIT_MICROHZ
This unit uses the programmable timers in the 8520s to keep track
of its time. It has precision down to about 2 microseconds, but
will drift as system load increases. The accuracy of this unit
is the same as that of the master clock of the machine. This unit
uses a timeval in its timerequest.


Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

19.01.2005, 16:45 Uhr

bubblebobble
Posts: 707
Nutzer
Mit dem timer.device.
Das geht so (AB2 Code, sollte aber kein Problem
sein das in C genauso zu machen).

code:
*msgport.MsgPort = CreateMsgPort_()
If  *msgport
  *msg.timerequest = CreateIORequest_(*msgport,SizeOf.timerequest)
  If *msg
    If OpenDevice_ ("timer.device",#UNIT_MICROHZ,*msg,0) = False
      *msgtr_nodeio_Command = #TR_ADDREQUEST
    
      // Zeit setzen:
      *msgtr_timetv_secs  = ... // so viele Sekunden plus
      *msgtr_timetv_micro = ... // so viele Mikrosekunden

      // und jetzt zum eigentlichen Warten:
      DoIO_ *msg
    
      // du kannst auch SendIO und CheckIO und WaitIO machen,
      // wenn du in der Zwischenzeit noch was berechnen willst.
      CloseDevice_ (*msg)   
    Else
      error {"Unable to open timer.device !"}
    End If
    DeleteIORequest_ (*msg)  
  Else
    error {"Failed to create timerequest !"}
  End If
  DeleteMsgPort_ (*msgport) 
Else
  error {"Failed to create msgport !"}
End If


Das ganz solltest du natürlich in drei Funktionen
verteilen, damit du nicht jedesmal
das Device öffnen und schliessen musst:

timer_open()
timer_wait(mytime)
timer_close()

ACHTUNG: tv_micro sind Mikrosekunden, nicht Millisekunden,
also eine 1/1000000 Sekunde. Ich denke diese Auflösung
reicht für deine Zwecke. Es geht noch feiner, aber dann
muss man sich mit der EClock Frequenz direkt rumschlagen
und das ist sehr fehleranfällig und kompliziert.

Wenn du ein Spiel oder eine Animation timen willst, solltest
du aber keine feste Zeit warten mit DoIO(), sondern
besser SendIO() benutzen, und dann deine Berechnungen machen.
Wenn die Berechnungen fertig sind, machst du ein WaitIO().
Das WaitIO() kehrt sofort zurück, falls die gewünschte Zeit
bereits überschritten ist, oder wartet ansonsten die verbleibende Zeit.
Nach WaitIO() solltest du dann sofort den nächsten SendIO()
rausschicken. (tv_micro und tv_secs wird runtergezählt,
muss also immer neu gesetzt werden).
Das ist für Spiele oder Animationen genau genug.



[ Dieser Beitrag wurde von bubblebobble am 19.01.2005 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

19.01.2005, 16:47 Uhr

Ralf27
Posts: 2779
Nutzer
Also Microsekunden ist schon wirklich sehr genau und mehr als Ausreichend für mein Projekt. Es geht dabei um Schrittmotoren. Ich betreibe sie gerade mit der Dos-Funktion Delay mit 1/50sek pro Schritt.
Da kann ich dann wirklich Gas geben. :)

PS: Ich progge als noch nicht in C sondern noch in Basic. Ich progge kaum noch und in Basic hab ich halt über 17 Jahre Erfahrung. Mir ist schon klar das C die Zukunft gehört, obwohl Microsoft schon wieder dafür einen neuen Namenn gefunden hat. .NET. Aber das ist mir jetzt wirklich zu hoch. Ich bleib lieber bei meinen Hobbyprojekten bei Basic, das auch auf dem Pegasos läuft. Leider geht es damit überhaupt nicht auf dem AmigaOne...

[ Dieser Beitrag wurde von Ralf27 am 19.01.2005 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

19.01.2005, 17:31 Uhr

bubblebobble
Posts: 707
Nutzer
Dann benutze doch BlitzBasic (AmiBlitz2).
Wenn du systemfreundlich programmierst läuft es überall.
(ausser AROS).

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de



[ - Antworten - Zitieren - Direktlink - ]

19.01.2005, 20:07 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von bubblebobble:
Dann benutze doch BlitzBasic (AmiBlitz2).
Wenn du systemfreundlich programmierst läuft es überall.
(ausser AROS).

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, UDM, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


Hab mir damals BB2 bei Oberland gekauft, konnte aber damit recht wenig anfangen.


--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Kurze Zeit warten [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.