Globale Funktion für alle Klassen



  • Dolphon schrieb:

    Ich habe folgende Funktion:
    ...

    Ich muss mich leider anschließen. Aktives Warten ist ganz große Scheiße. Verschwendung von CPU-Resourcen. Auf meinem Rechner gibt es gerade 156 tasks, 3 aktive und 153 schlafende. Wenn die 153 aktiv warten würden, würde mein Rechner nicht mehr reagieren.

    Und sonst brauchst Du noch Nachhilfe, was das Kompilieren und Linken angeht. DeKLARieren kannst Du eine Funktion so oft Du willst. Du kannst eine Funktion auch ohne Definition aufrufen. Definieren tust Du sie aber nur einmal.

    void dings(int); // Deklaration
    
    void dings(int)
    {
      // Definition
    }
    

    Funktionsdeklarationen von Funktionen, die Modul-übergreifend benutzt werden, werden typischerweise in Header-Dateien deklariert.

    Gruß,
    SP



  • Hmm, wie könnte man ein Sleep schreiben, dass NICHT aktiv wartet?



  • Wieso selbst schreiben, wenn das Betriebssystem die Funktion bereits anbietet?



  • Nexus schrieb:

    Wieso selbst schreiben, wenn das Betriebssystem die Funktion bereits anbietet?

    Es geht mir nicht ums Selbstschreiben, aber wie kann so etwas funktionieren? Es muss ja immer auf irgendetwas gewartet werden -> ein Zustand gecheckt werden



  • Samyboy schrieb:

    Nexus schrieb:

    Wieso selbst schreiben, wenn das Betriebssystem die Funktion bereits anbietet?

    Es geht mir nicht ums Selbstschreiben, aber wie kann so etwas funktionieren? Es muss ja immer auf irgendetwas gewartet werden -> ein Zustand gecheckt werden

    Sleep() (im Fall von windows) wartet nicht aktiv, sondern sagt dem Kernle sozusagend: Weck mich in x Sekunden wieder auf. Der Thread wird dann mindestens für den angegebenen Zeitraum suspended.



  • Samyboy schrieb:

    Es geht mir nicht ums Selbstschreiben, aber wie kann so etwas funktionieren? Es muss ja immer auf irgendetwas gewartet werden -> ein Zustand gecheckt werden

    Nö. Aber um es besser zu machen, muss man per Du mit dem Betriebssystem sein. In modernen Betriebssystemen gibt es einen Scheduler, der regelt, wann welche Prozesse/Threads CPU-Zeit bekommen. Das "richtige" sleep wird dem Scheduler des Betriebssystems irgendwie signalisieren, dass der aufrufende Thread für die nächste Zeit keine CPU-Resourcen mehr zugeteilt bekommt. Wie das genau funktioniert ist doch egal.

    Gruß,
    SP



  • Nunja, das passive Warten ist schön und gut, aber eine Windows Applikation wird 90% der Zeit nicht passiv warten, da das den Scriptvorgang abbricht, das heisst Windows Prozedur Messsages können nicht mehr abgefangen werden, was dazu führt, dass das Fenster nicht minimiert/maximiert, bewegt etc. werden kann.

    Also muss man sich selbst ein aktives Warten schreiben ^^



  • Samyboy, der in GUI-Applikationen übliche "Event-loop" besitzt typischerweise ein blockierendes "getNextMessage()", worüber Ereignisse wie Mouseklicks, Tastendrücke, etc zur Bearbeitung "abgeholt" werden. Das Stichwort hier ist "blockierend". Wenn's keine Nachrichten gibt, schläft der Thread irgendwo in der "Nachrichten-abhol-Funktion". Die meisten GUI-Anwendungen, die nicht nebenbei irgendwelche aufwändigen Berechnungen durchführen müssen, schlafen 99,99% der Zeit.

    Wenn man keine Ahnung hat, einfach mal Klappe halten.

    Gruß,
    SP



  • Sebastian Pizer schrieb:

    Samyboy, der in GUI-Applikationen übliche "Event-loop" besitzt typischerweise ein blockierendes "getNextMessage()", worüber Ereignisse wie Mouseklicks, Tastendrücke, etc zur Bearbeitung "abgeholt" werden. Das Stichwort hier ist "blockierend". Wenn's keine Nachrichten gibt, schläft der Thread irgendwo in der "Nachrichten-abhol-Funktion". Die meisten GUI-Anwendungen, die nicht nebenbei irgendwelche aufwändigen Berechnungen durchführen müssen, schlafen 99,99% der Zeit.

    Wenn man keine Ahnung hat, einfach mal Klappe halten.

    Gruß,
    SP

    Hast du meinen Post gelesen oder stellst du dich einfach dumm an?

    Nochmals lesen und entschuldigen, dankeschön 🙂



  • Samyboy: nein, du hast es anscheinend immer noch nicht verstanden...
    (und schreib uns mal bitte, was du wirklich erreichen willst, also wo du die sleep-Funktion einsetzen willst!)



  • Samyboy schrieb:

    Nunja, das passive Warten ist schön und gut, aber eine Windows Applikation wird 90% der Zeit nicht passiv warten, da das den Scriptvorgang abbricht, das heisst Windows Prozedur Messsages können nicht mehr abgefangen werden, was dazu führt, dass das Fenster nicht minimiert/maximiert, bewegt etc. werden kann.

    Um Fenster bewegen zu können, benötigst du nicht 100% der Prozessorzeit. Auch nicht 90%. Überleg doch mal, was passieren würde, wenn alle Anwendungen auf deinem PC so miserabel programmiert wären.

    Du darfst Sebastian Pizer ruhig glauben. Im Gegensatz zu dir weiss er, wovon er spricht.



  • Samyboy schrieb:

    Hast du meinen Post gelesen oder stellst du dich einfach dumm an?

    Gelesen, ja. Das verstanden, was Du sagen wolltest, wahrscheinlich nicht. Du kannst ja mal näher erklären, was Du mit "Skriptvorgang" und "Windows Prozedur Messages" genau meinst. Ich kann zumindest nirgends wo in Deinem Text ein Argument dafür finden, warum man sich bei einer GUI-Anwendung ein "sleep" mit aktivem Warten selbst bauen sollte.

    Gruß,
    SP



  • Samyboy schrieb:

    Nunja, das passive Warten ist schön und gut, aber eine Windows Applikation wird 90% der Zeit nicht passiv warten, da das den Scriptvorgang abbricht, das heisst Windows Prozedur Messsages können nicht mehr abgefangen werden, was dazu führt, dass das Fenster nicht minimiert/maximiert, bewegt etc. werden kann.

    Also muss man sich selbst ein aktives Warten schreiben ^^

    schwachsinn, bei deiner Funktion bewegt sich noch viel weniger



  • nur1 schrieb:

    Samyboy schrieb:

    Nunja, das passive Warten ist schön und gut, aber eine Windows Applikation wird 90% der Zeit nicht passiv warten, da das den Scriptvorgang abbricht, das heisst Windows Prozedur Messsages können nicht mehr abgefangen werden, was dazu führt, dass das Fenster nicht minimiert/maximiert, bewegt etc. werden kann.

    Also muss man sich selbst ein aktives Warten schreiben ^^

    schwachsinn, bei deiner Funktion bewegt sich noch viel weniger

    Also es tut mir leid, wenn ich hier Schwachsinn quasle, natürlich weiss Sebastian mehr wie ich, bin halt noch ein Anfänger 😃

    Möchte mich hiermit entschuldigen bei dir ^^

    Was ich gemeint habe ist, wenn ich Sleep() einsetze in einem GUI Program, dann wird der Skript abgebrochen, dass heisst nichts kann mehr gemacht werden mit meinem Fenster. (Kein minimieren, verschieben etc.).

    Daher finde ich es klüger selbst ein sleep() zu schreiben und dies mit PeekMessage() (anstatt GetMessage()) zu kombinieren.
    Wenn es keine Messages gibt, gucken ob die Sleepzeit vorbei ist, sonst die Message entgegennehmen (natürlich nur Messages wie das bewegen, etc.)



  • Samyboy schrieb:

    Was ich gemeint habe ist, wenn ich Sleep() einsetze in einem GUI Program, dann wird der Skript abgebrochen, dass heisst nichts kann mehr gemacht werden mit meinem Fenster. (Kein minimieren, verschieben etc.).

    Daher finde ich es klüger selbst ein sleep() zu schreiben und dies mit PeekMessage() (anstatt GetMessage()) zu kombinieren.
    Wenn es keine Messages gibt, gucken ob die Sleepzeit vorbei ist, sonst die Message entgegennehmen (natürlich nur Messages wie das bewegen, etc.)

    Wozu? Windows sorgt schon dafür, dass dein Programm "schläft", wenn es nichts zu tun hat.



  • nur1 schrieb:

    Samyboy schrieb:

    Was ich gemeint habe ist, wenn ich Sleep() einsetze in einem GUI Program, dann wird der Skript abgebrochen, dass heisst nichts kann mehr gemacht werden mit meinem Fenster. (Kein minimieren, verschieben etc.).

    Daher finde ich es klüger selbst ein sleep() zu schreiben und dies mit PeekMessage() (anstatt GetMessage()) zu kombinieren.
    Wenn es keine Messages gibt, gucken ob die Sleepzeit vorbei ist, sonst die Message entgegennehmen (natürlich nur Messages wie das bewegen, etc.)

    Wozu? Windows sorgt schon dafür, dass dein Programm "schläft", wenn es nichts zu tun hat.

    Naja, zum Beispiel zeige ich ein Bild an und nach 3 Sekunden soll das zweite angezeigt werden ^^



  • Samyboy schrieb:

    nur1 schrieb:

    Samyboy schrieb:

    Was ich gemeint habe ist, wenn ich Sleep() einsetze in einem GUI Program, dann wird der Skript abgebrochen, dass heisst nichts kann mehr gemacht werden mit meinem Fenster. (Kein minimieren, verschieben etc.).

    Daher finde ich es klüger selbst ein sleep() zu schreiben und dies mit PeekMessage() (anstatt GetMessage()) zu kombinieren.
    Wenn es keine Messages gibt, gucken ob die Sleepzeit vorbei ist, sonst die Message entgegennehmen (natürlich nur Messages wie das bewegen, etc.)

    Wozu? Windows sorgt schon dafür, dass dein Programm "schläft", wenn es nichts zu tun hat.

    Naja, zum Beispiel zeige ich ein Bild an und nach 3 Sekunden soll das zweite angezeigt werden ^^

    Dafür nimmt man einen Timer der nach 3 Sekunden ein Signal auslöst und damit den Thread aufweckt. Sleep ist für solche Aufgaben FALSCH.



  • loks schrieb:

    Samyboy schrieb:

    nur1 schrieb:

    Samyboy schrieb:

    Was ich gemeint habe ist, wenn ich Sleep() einsetze in einem GUI Program, dann wird der Skript abgebrochen, dass heisst nichts kann mehr gemacht werden mit meinem Fenster. (Kein minimieren, verschieben etc.).

    Daher finde ich es klüger selbst ein sleep() zu schreiben und dies mit PeekMessage() (anstatt GetMessage()) zu kombinieren.
    Wenn es keine Messages gibt, gucken ob die Sleepzeit vorbei ist, sonst die Message entgegennehmen (natürlich nur Messages wie das bewegen, etc.)

    Wozu? Windows sorgt schon dafür, dass dein Programm "schläft", wenn es nichts zu tun hat.

    Naja, zum Beispiel zeige ich ein Bild an und nach 3 Sekunden soll das zweite angezeigt werden ^^

    Dafür nimmt man einen Timer der nach 3 Sekunden ein Signal auslöst und damit den Thread aufweckt. Sleep ist für solche Aufgaben FALSCH.

    Hab kein Wort verstanden - Sag ich ja, bi nei nAnfänger xD



  • *Kopfschüttel*

    Die Intelligenz auf dem Planeten ist eine konstante Größe... Leider steigt die Bevölkerungszahl rapide...



  • loks schrieb:

    *Kopfschüttel*

    Die Intelligenz auf dem Planeten ist eine konstante Größe... Leider steigt die Bevölkerungszahl rapide...

    Wie alt bist du denn? 🙂


Anmelden zum Antworten