DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Gesucht: Sekundentakt | [ - Search - New posts - Register - Login - ] |
1 2 3 -4- | [ - Post reply - ] |
2006-06-28, 14:42 h Holger Posts: 8116 User |
Zitat:16, zumindest als ich das letzte Mal eine Dokumentation des AmigaOS gelesen haben. 16 für die Anwendung, 16 für's System. Vielleicht hat man ja später ein paar von den unbenutzten System-Bits an die Anwendung abgegeben? Würde mich interessieren, vor allem ab wann. Zitat:Das erste geht schon für den MessagePort des Process drauf, noch bevor das eigene Programm läuft. Dann eins pro IORequest, eins pro Fenster, eins, wenn man mit der workbench.library kommunizieren will (D&D etc.), einen ARexx-Port, noch eins, wenn man asynchrone DOS-Operationen durchführen will... Zitat:Ich nicht. Bei Fenstern kann man ruhig einen shared-MessagePort verwenden, da es grundsätzlich nur ein aktives Fenster gibt, bei dem User-Input (oder auch Ticks) ankommen. Zuordnen muß man sowieso. Zitat: Halte ich für die falsche Argumentation, Resourcen des Users zu verschwenden, um Fehler des Programmierers abzuschwächen. Lieber stabile Programme schreiben, statt so einen workaround. Außerdem funktioniert es im AmigaOS sowieso in 90% der Fälle nicht, weil das abstürzende Programm die anderen in Mitleidenschaft zieht. Und wenn man schon einen Notfallplan implementiert, sollte es sich um einen zusätzlichen Task handeln, der die Anwendungsdaten komplett kennt und somit im Ernstfall alle Dokumente speichern kann, nicht wie bei Deinen 1 Fenster == 1 Task Ansatz alle Dokumente minus eins. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2006-06-28, 14:44 h Holger Posts: 8116 User |
Zitat:Amen. Zitat: Wenn Du mit einem spezifischen IORequest arbeitest, dann im Allgemeinen, weil Du dessen erweiterte Struktur benötigst. Dann mußt Du so oder so in die Dokumentation der Struktur schauen. Wenn Du allerdings nur den Basistyp brauchst, kann Du auch den Basistyp benutzen. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2006-06-28, 17:09 h whose Posts: 2156 User |
Zitat: Hm, ich sehe schon, die Vertreter der "reinen Lehre" gewinnen die Oberhand Nun ja, die Leser dieses Threads werdens lesen und hoffentlich auffassen. Ich sehe das ganze zwar leicht anders (IORequest vs. IOStdRequest (da gibts keine Warnings? ), völlig unterschiedliche Bezeichner etc.), aber um solche Sachen will ich keinen Streit auslösen. Ich kann ja das Beispiel entsprechend ergänzen, kein Problem. Grüße -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Answer - Quote - Direct link - ] |
2006-06-29, 19:52 h gni Posts: 1106 User |
Zitat:Warum mußt Du jetzt mit "Birnen" anfangen? Wir haben über "Äpfel" geredet :-( Das diese beiden Strukturen nicht zueinander passen, sollte klar sein. Warum mußt Du andere fragen. Eventuell kann Olsen ja was dazu sagen. [ - Answer - Quote - Direct link - ] |
2006-06-30, 15:39 h whose Posts: 2156 User |
Zitat: Hm, da unterscheiden sich vermutlich unsere Sichtweisen, deswegen vielleicht... ich sehe das Ganze als "Benutzen eines AmigaOS-Devices auf dem empfohlenen Weg" und nicht als "wir übermitteln ohne jeglichen Bezug zum API die Adresse einer Struktur" (woher weiß man auf Anhieb, daß tr_node eine struct IORequest ist, wenn man länger nichts mit dem timer.device zu tun hatte?). Bei allem Verständnis für "formal korrekte" Wege, es wird oft vergessen, daß viele Leute kein fotographisches Gedächtnis besitzen und manche Dinge schlicht vergessen werden (weil selten benötigt). Die IO-Funktionen für Devices erwarten nun einmal den Zeiger auf eine Struktur vom Typ "IORequest", da kann ich nichts für. Ich hätte vermutlich weniger Probleme mit Deiner Sichtweise, wenn Deine Vorgehensweise für alle Device-bezogenen Strukturen zutreffend wäre. Das ist sie aber nun mal nicht. Deswegen mein Vergleich von IORequest und IOStdRequest (spätestens da muß man ja so oder so wieder casten,um die Warnings loszuwerden. Da kann man das auch gleich konsequent tun, finde ich). Möglicherweise ist das aber ein Punkt, den man nun (mit OS4 z.B.) ändern könnte. Einheitliche Typen und Bezeichner für die IORequests, Erweiterungen der Strukturen dahin, wo sie hingehören. Ans Ende der Device-spezifischen Struktur. Wenn bei allen Devices mit Erweiterungen der IORequest-Struktur diese zu Beginn mit (device-Kürzel)_Node stehen würde, dann wäre das kein Thema. Man weiß, daß bei jedem Device zu Beginn der IO-Struktur ein IORequest mit dem Bezeichner bla_Node steht und gut. So verwirrt es aber nur beim Lesen (wie gesagt, wer weiß schon, das tr_node eine struct IORequest ist? Man kanns "vermuten", weil es sich um eine Device-IO-Funktion handelt, aber "Vermuten" beim Lesen eines Programms? Ich weiß ja nicht...). Meiner Meinung nach sinds einfach nur zwei verschiedene Sichtweisen des (mehr oder weniger) gleichen Vorgangs, die uns hier beschäftigen. Du siehst es mehr aus der formalen (und keineswegs falschen) Sicht, ich mehr aus der Sicht des "Otto Normal"-Entwicklers, der eben nicht die Zeit und die Möglichkeiten hat, sich bis in alle Einzelheiten in ein API einzuarbeiten (nicht falscher als die formale Sicht, meiner Meinung nach). Fallstricke in Sachen Cast gibt es genug, zweifellos, aber genauso gibt es Fallstricke in Sachen "nichtssagende Bezeichner". Ich glaube, das gleicht sich irgendwo aus. Um es auf den Punkt zu bringen: Ich sehe ein, daß Du (im Hinblick aufs reichliche Casten) Recht hast. Nur bringt uns das nicht weiter und den Anfängern hilft es relativ wenig bei dem Versuch, AmigaOS zu verstehen und zu verwenden, wenn sie mit Formalien zugeworfen werden. Was nicht heißen soll, daß erfahrene Leute wie Du nicht darauf aufmerksam machen dürfen, daß da einiges im Argen liegt. Ich bin mir sicher, daß das von den Mitlesenden aufgenommen und verwertet wird. Nur meine 2 Cent... Grüße -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ Dieser Beitrag wurde von whose am 30.06.2006 um 15:49 Uhr geändert. ] [ Dieser Beitrag wurde von whose am 30.06.2006 um 16:11 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2011-12-06, 19:34 h bruZard Posts: 307 User |
Sorry wenn ich diesen Zombie-Thread nochmal rauskrame, aber ich bekomme das mit dem Timer Device einfach nicht auf die Reihe. Könnte mal ein Fachmann den hier gezeigten "Uhren-Source" eindampfen und mir zeigen wie ich die vergangenen Millisekunden erhalte? Ich habe versucht den hier gezeigten Source anzupassen, bin aber kläglich gescheitert. Der Overkill an Strukturen und Funktionsaufrufen ist einfach irre und für einen Windows-Programmierer kaum verständlich -- PanzerZ | methusalem | basic [ - Answer - Quote - Direct link - ] |
2011-12-06, 21:03 h thomas Posts: 7717 User |
code:#include <proto/timer.h> #include <proto/dos.h> int main (void) { struct timeval start; struct timeval ende; struct timeval diff; GetSysTime (&start); Delay (50); GetSysTime (&ende); diff = ende; SubTime (&diff,&start); Printf ("Startzeit: %10lu.%06lun",start.tv_secs,start.tv_micro); Printf ("Endezeit: %10lu.%06lun",ende.tv_secs,ende.tv_micro); Printf ("Differenz: %10lu.%06lun",diff.tv_secs,diff.tv_micro); return (0); } -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2011-12-06, 22:07 h bruZard Posts: 307 User |
GetSysTime existiert im OS3.x NDK nicht -- PanzerZ | methusalem | basic [ - Answer - Quote - Direct link - ] |
2011-12-06, 22:15 h thomas Posts: 7717 User |
@bruZard: Schau nochmal genau hin. code:timer.device/GetSysTime timer.device/GetSysTime NAME GetSysTime -- Get the system time. (V36) SYNOPSIS GetSysTime( Dest ) A0 void GetSysTime( struct timeval * ); FUNCTION Ask the system what time it is. The system time starts off at zero at power on, but may be initialized via the TR_SETSYSTIME timer.device command. System time is monotonocally increasing and guarenteed to be unique (except when the system time is set back). A0 will be left unchanged. This function is less expensive to use than the TR_GETSYSTIME IORequest. INPUTS Dest -- pointer to a timeval structure to hold the system time. RESULTS Dest -- the timeval structure will contain the system time. NOTES This function may be called from interrupts. SEE ALSO timer.device/TR_GETSYSTIME, timer.device/TR_SETSYSTIME, BUGS V36 ist OS 2.0. -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2011-12-06, 22:19 h bruZard Posts: 307 User |
Dann hakelt der m68k Crosscompiler, oder das AmiDevCpp Paket ist nicht vollständig. Der g++ meckert jedenfalls dass GetSysTime() weder deklariert noch definiert wurde. Ich mache mich da mal schlau. Trotzdem vielen Dank für Deine Hilfe! -- PanzerZ | methusalem | basic [ - Answer - Quote - Direct link - ] |
2011-12-07, 11:40 h thomas Posts: 7717 User |
So geht's auch:code:#include <proto/exec.h> #include <proto/dos.h> #include <proto/timer.h> struct Library *TimerBase; int main (void) { struct MsgPort *port = CreateMsgPort(); if (port) { struct timerequest *timer = (struct timerequest *) CreateIORequest (port,sizeof(struct timerequest)); if (timer) { if (0 == OpenDevice ("timer.device",UNIT_MICROHZ,(struct IORequest *)timer,0)) { struct timeval start; struct timeval ende; struct timeval diff; TimerBase = (struct Library *) timer->tr_node.io_Device; timer->tr_node.io_Command = TR_GETSYSTIME; timer->tr_node.io_Flags = IOF_QUICK; DoIO ((struct IORequest *)timer); start = timer->tr_time; Delay (50); timer->tr_node.io_Command = TR_GETSYSTIME; timer->tr_node.io_Flags = IOF_QUICK; DoIO ((struct IORequest *)timer); ende = timer->tr_time; diff = ende; SubTime (&diff,&start); Printf ("Startzeit: %10lu.%06lun",start.tv_secs,start.tv_micro); Printf ("Endezeit: %10lu.%06lun",ende.tv_secs,ende.tv_micro); Printf ("Differenz: %10lu.%06lun",diff.tv_secs,diff.tv_micro); CloseDevice ((struct IORequest *)timer); } DeleteIORequest ((struct IORequest *)timer); } DeleteMsgPort (port); } return (0); } -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2011-12-07, 16:38 h bruZard Posts: 307 User |
Hey, danke thomas. Ich schaue mir das mal an. -- PanzerZ | methusalem | basic [ - Answer - Quote - Direct link - ] |
2011-12-07, 16:44 h bruZard Posts: 307 User |
ok, einfach mal kompilieren ist nicht:Zitat: -- PanzerZ | methusalem | basic [ - Answer - Quote - Direct link - ] |
2011-12-07, 16:57 h bruZard Posts: 307 User |
Wenn ich auf struct Device* TimerBase; umstelle läufts. Vielen Dank nochmal! -- PanzerZ | methusalem | basic [ - Answer - Quote - Direct link - ] |
2011-12-07, 20:30 h bruZard Posts: 307 User |
Ich bekomme jetzt Daten aber die scheinen nicht zu stimmen. 9FPS in einem Programm das fast nichts tut? Zudem geht der Wert alle naselang in den negativen Bereich obwohl die Variable als unsigned deklariert ist. Ich brauche doch einfach nur eine Möglichkeit zu jedem Zeitpunkt die Millisekunden zu erhalten der seit System- oder Programmstart vergangen sind -- PanzerZ | methusalem | basic [ - Answer - Quote - Direct link - ] |
1 2 3 -4- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Gesucht: Sekundentakt | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |