ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > CPU Belastung bei MUI-Application | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
31.12.2002, 10:44 Uhr StefanHaegele Posts: 281 Nutzer |
Hallo, habe erstaunt festgestellt, dass ein MUI-Application, welche noch kein Window an die Application gebunden hat, bei der Abfrage ( while ( DoMethod( MUIO_App, MUIM_Application_NewInput, &signal ) != MUIV_Application_ReturnID_Quit ) { if ( signal ) { signal = Wait( signal ); } } die CPU Belastung auf 80% - 100% steigt. Sobald man ein Window anhängt sinkt die CPU Belastung auf 3%. Da ich die Windows aber erst bei Bedarf binde, habe ich bis jetzt immer ein Dummywindow gebunden. Gibt es hier noch eine andere Möglichkeit ? Danke Stefan [ Dieser Beitrag wurde von StefanHaegele am 31.12.2002 editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
02.01.2003, 14:03 Uhr Holger Posts: 8116 Nutzer |
Also erstmal ist es überhaupt keine gute Idee, ein und dieselbe Variable für die Signale, auf die man wartet und die man tatsächlich empfangen hat, zu benutzen. Und wenn Du kein Signal hast, auf das Du wartest, produzierst Du eine permanente Schleife. Die wird dann natürlich mit jedem verfügbaren CPU-Cycle ausgeführt. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
02.01.2003, 14:14 Uhr StefanHaegele Posts: 281 Nutzer |
Das gleiche passiert aber auch , wenn man 2 verschiedene Variablen für die Signale verwendet. Ich verstehe auch nicht, wieso es schlecht sein soll, hier die gleiche Variable zu benutzen ? [ - Antworten - Zitieren - Direktlink - ] |
02.01.2003, 14:20 Uhr Holger Posts: 8116 Nutzer |
Wenn zwei Dinge völlig unterschiedliche Bedeutung haben, sollte man sie eben nicht in einer Variablen speichern. Und entscheidend ist die andere Sache: Wenn Du kein Signal hast, wartest Du auch nicht. Wenn Du nicht wartest, rotiert Dein Programm in einer Schleife. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
02.01.2003, 16:41 Uhr thomas Posts: 7718 Nutzer |
Wait(0) kommt nie zurück, damit wartet man ewig. Es gibt auch keine CPU-Belastung. signal = Wait(signal) ist deshalb schlecht, weil du normalerweise nur ein Signal zurückbekommst, und dir damit die anderen Signale ausmaskierst. Wenn du nur auf ein Signal wartest, brauchst du das Ergebnis nicht auszuwerten, du weißt ja, was passiert ist. Normalerweise macht man das so: signals = signal1 | signal2 |SIGBREAKF_CTRL_C; sigrecv = Wait (signals); if (sigrecv & signal1) { } if (sigrecv & signal2) { } if (sigrecv & SIGBREAKF_CTRL_C) { } Mit MUI kenne ich mich nicht aus, aber vermutlich kommt DoMethod hier sofort mit einem Fehlercode zurück, weil MUIM_Application_NewInput ohne Fenster keinen Sinn macht. Du solltest dir den Rückgabewert mal ausgeben lassen. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Antworten - Zitieren - Direktlink - ] |
02.01.2003, 21:31 Uhr Holger Posts: 8116 Nutzer |
Zitat:Richtig, aber wenn Du genauer auf den Quellcode schaust, siehst Du, daß er wenn signal==0 ist, Wait() gar nicht aufruft. Ich programmiere auch nicht mit MUI, aber es spielt ja auch keine Rolle, ob die Variable signal aufgrund eines Fehlers oder einer normalen Operation 0 ist. Wenn kein Intuition-Fenster geöffnet wurde, ist i.A. kein Signal durch Intuition belegt worden, und wenn MUI oder die Anwendung kein weiters Signal benutzen, bzw. es durch die fehlerhafte Benutzung der signal-Variable überschrieben wurde, ist kein sinnvolles Wartekriterium mehr vorhanden. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
04.01.2003, 14:54 Uhr thomas Posts: 7718 Nutzer |
Zitat: Stimmt Auffällig. while (DoMethod) { } Klar, daß Busy-Wait die CPU belastet. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Antworten - Zitieren - Direktlink - ] |
04.01.2003, 15:52 Uhr StefanHaegele Posts: 281 Nutzer |
Seid ihr sicher ? Dies ist nämlich die std. MUI-Mainloop. Stefan [ - Antworten - Zitieren - Direktlink - ] |
06.01.2003, 15:44 Uhr Holger Posts: 8116 Nutzer |
Zitat:Was nicht automatisch heißt, daß es richtig ist. Erstens sind MUI-Anwendungen eh für langsames und träges Verhalten bekannt, und zweitens muß der Verfasser dieses main-loops ja nicht an die Möglichkeit keiner geöffneten Fenster gedacht haben. Wobei die if-Anweisung darauf hindeutet, daß jemand an die Möglichkeit, daß signal==0 sein kann gedacht hat, die ganze Schleifenkonstruktion insgesamt ist aber unter diesem Gesichtspunkt katastrophal, selbst wenn man die falsche Benutzung der Variablen ignoriert. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
06.01.2003, 16:08 Uhr tokai Posts: 1071 Nutzer |
Das ist doch gar nicht so schwierig... man sollte nur die docs richtig lesen. Steht (fast) alles drin. Original by MUI-Oberguru Stefan code:--/* ** This is the ideal input loop for an object oriented MUI application. ** Everything is encapsulated in classes, no return ids need to be used, ** we just check if the program shall terminate. ** Note that MUIM_Application_NewInput expects sigs to contain the result ** from Wait() (or 0). This makes the input loop significantly faster. */ set(window,MUIA_Window_Open,TRUE); { ULONG sigs = 0; while (DoMethod(app,MUIM_Application_NewInput,&sigs) != MUIV_Application_ReturnID_Quit) { if (sigs) { sigs = Wait(sigs | SIGBREAKF_CTRL_C); if (sigs & SIGBREAKF_CTRL_C) break; } } } http://www.christianrosentreter.de [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > CPU Belastung bei MUI-Application | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |