C/C++: Thread starten (CPU.Last < 20 || ...)



  • Servus,

    ich schreibe nur so aus Spaß immer wieder mal eine C/C++ Anwendung/Bibliothek (Hobby). Dieses Wochenende habe ich mir mal einen Garbage Collector vorgenommen und möchte diesen danach mit Boost und libGC messen. Hoffentlich bin ich nicht schlechter als Faktor 10 😉

    So, für die Aufgaben im GC würde ich gerne einen oder mehrere Threads verwenden. Standardmäßig sollen die Threads gestartet werden, wenn

    • die Anwendung einen Befehl gibt (nach der Erledigung einer Aufgabe, die GUI wartet auf eine Benutzeraktion, ...)
    • die Systemauslastung unter einen gewissen Wert fällt z.B.
    if(    ( CPU.Last < 20 && (CurrentTimestamp - LastRunTimestamp) > 60000 )
        || ( GC.freeMemInProzent() < 10 && GC.Memory() < RAM.Free() )
        || ...
    ) // end if()
    
    • ...

    Zudem würde ich gerne wissen, wenn die CPU-Auslastung einen gewissen Wert überschreitet. Wie bekomme ich diese Information? Auf Google, CodeProject und MSDN hatte ich bis jetzt noch nicht die benötigten Informationen gefunden. Zudem Blicke ich über den Tellerrand von MS und würde gerne auch alle POSIX-Systeme mit unterstützen.

    Gibt es eine Möglichkeit einen Callback-Handler (oder so was ähnliches) im Betriebssystem zu registrieren oder ein Event vom BS abzufangen?
    Wie sieht das bei
    - Windows
    - POSIX (Linux & BSD)
    - Mac
    aus?

    Gruss,
    Thomas



  • Also die Auslastung kannst du irgendwie so auslesen:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-86669.html

    Bin mir aber nicht mehr sicher, ob das so immer stimmt. Habe es selbst mal für etwas kleines gemacht, und wenn ich mich recht erinnere musste ich um genaue Ergebnisse zu bekommen einen etwas anderen Weg einschlagen. (Solltest du aber in der MSDN bei den dort genannten Funktionen selbst finden).



  • @drakon Danke für deinen Beitrag. Vielleicht fällt es dir noch ein. Auf der MSDN konnte ich nichts brauchbares finden, außer für die .Net-Plattform

    Abschließend möchte ich noch ein paar Links angeben:

    Windows: http://www.hardwareluxx.de/community/archive/index.php/t-410669.html
    (bezieht sich auf den C++ Beitrag von drakon)
    UNIX: http://www.teamquest.com/resources/gunther/display/5/index.htm
    Wiki: http://de.wikipedia.org/wiki/Load

    Gruß,
    Thomas


Anmelden zum Antworten