Idee für Gelangweilte: Prozessprioritaetsetzer fuer Windows (simpel)



  • Hi,

    ich programmiere fuer mein Leben gern mit python. dabei kommt es auch vor, dass ich rechenintensive sachen veranstalte, die einige sekunden bis stunden ackern. der python interpreter laeuft in der zeit natuerlich auf hochlast, zieht aber seltsamerweise das gesamte system mit runter (wie als ob er auf hoher prioritaet waere).

    Aufgabe:
    schreibe ein programm in ansi c oder c++ unter zuhilfenahme von Win32API funktionen, das jeden neuen prozess mit angegebenem namen auf eine angegebene prioritaet setzt.
    beispielaufruf: <programm> <prioritaet> <prozessname>
    prioritaeten sollen mindestens als wort (idle, normal, high, realtime) angebbar sein.
    wenn ein neuer prozess namens "pythonw.exe" startet, muss auch ein <prozessname> "python" eine aktion ausloesen (vergleich mit strstr(), string::find() oder vergleichbarem).
    das programm sollte minimale cpuzeit verbrauchen und vorzugsweise eine konsolenanwendung sein. die reaktionszeit ist unkritisch, sollte aber moeglichst kurz sein.
    kompletter quelltext wird verlangt (in einer binary kann schliesslich alles moegliche sein) und sollte mit GCC ohne warnungen kompilierbar sein (bitte keine kludges wegen ein paar "das wuerde wegoptimiert"-meldungen).

    ich wuerde dieses programm auch selber schreiben, bin aber erstens zu faul und zweitens glaube ich, dass soeine relativ ueberschaubare aufgabe prima fuer anfaenger ist.

    wer bock hat, soll einfach drauf los schreiben.

    hier noch ein paar compilerflags, die beim debuggen helfen:

    hilfreiche GCC compilerflags schrieb:

    -ansi -pedantic -W -Waggregate-return -Wall -Wbad-function-cast -Wcast-align -Wcast-qual -Wchar-subscripts -Wfloat-equal -Wformat-nonliteral -Wformat=2 -Wimplicit-int -Winline -Wlarger-than-1024 -Wmain -Wmissing-braces -Wmissing-declarations -Wmissing-format-attribute -Wmissing-prototypes -Wnested-externs -Wpacked -Wpadded -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wno-strict-aliasing -Wstrict-prototypes -Wswitch -Wtrigraphs -Wuninitialized -Wunreachable-code -Wundef -Wwrite-strings

    (edit by korbinian: titel etwas angepasst)



  • wenn du jetzt nicht gesagt hättest das es mit GCC kompilierbar sein muss hätt ich sofort angefangen dies zu programmieren aber ich habe nur noch Visual Studio 2003 ud 1.0;-)



  • wenn du ne legale moeglichkeit kennst, kostenlos Visual Studio code zu kompilieren, waere mir das genauso recht.



  • *lol* Cracki ,
    zulange im Weihrauch gehangen? :xmas2:



  • noe, die WPC aufgaben haben mich interessiert und da hab ich mit python prototypisiert. nur laeuft meine loesung fuer die expert-aufgabe (geschenke sortieren) fuer 30000 pakete schon 100 sekunden, aber auf C++ portiert kann das um 1-2 groessenordnungen schneller werden.

    jetzt pfeif ich mir noch schnell ein C++ tutorial rein, damit ich innerhalb der naechsten tage noch eine saubere ansi c++ loesung abliefern kann.

    edit: korbinian hat es erfasst. ich muss nachher mal noch rauskriegen, wo man hier solche ideen normalerweise loswird. ich kenn ja die situation von anfaengern, dass sie ueben wollen, aber nichts zu programmieren haben...



  • so hab mal angefang zu basteln :xmas1:

    hier haste mal nen kleinen screenshot für den Anfang
    http://skippy.dyndns.ws/Forum/viewtopic.php?t=64



  • So hab noch nen Screenshot dazugepackt und ne funktionsfähige Version reingepackt

    jetzt fehlt nur noch die verarbeitung der kommandozeile und fertig ist die sache da muss ich nachher aber mal grübeln wies geht da ich keine Ahnung hab wie man das mit der MFC macht



  • c.rackwitz schrieb:

    wenn du ne legale moeglichkeit kennst, kostenlos Visual Studio code zu kompilieren, waere mir das genauso recht.

    http://www.microsoft.com/germany/msdn/vstudio/express/download.mspx <-- runterladen und ausprobieren obs geht 😉 MS ist derzeit mal wieder ein wenig spendabel. (aber nur Express)



  • Hi!
    Gibt's eine Möglichkeit, die Express-Version auch ISDN Nutzern ohne Flatrate (sonst hätt' ich wohl DSL) schmackhaft zu machen? 93MB ist 'viel' für einen ISDN-1-Kanal Nutzer wie mich (2. Kanal ist einfach zu teuer), und ich müsste daher ca. 4h oder mehr Studen dran saugen. Kann man das ganze nicht direkt herunterladen, also kein Web-Install? Zur Not nehm ich die 4 Stunden mal in Kauf, aber das ist schon 'viel' Zeit, da ich im Monat nur 60 zur Verfügung habe

    Edit: Ich glaube, mein Gedanke wurde nicht ganz klar. Ich hätte schon Zugriff unter der Woche zu einem DSL-PC, nur weiß ich nicht, ob das klappt, wenn ich mir die 93MB dann in das 'Installationsverzeichnis' lade, und mir das dann auf CD brenne. Weiß ja nicht, ob man da einen Installer herunterlädt oder das gleich "installiert hat".



  • Brutus schrieb:

    Hi!
    Gibt's eine Möglichkeit, die Express-Version auch ISDN Nutzern ohne Flatrate (sonst hätt' ich wohl DSL) schmackhaft zu machen? 93MB ist 'viel' für einen ISDN-1-Kanal Nutzer wie mich (2. Kanal ist einfach zu teuer), und ich müsste daher ca. 4h oder mehr Studen dran saugen. Kann man das ganze nicht direkt herunterladen, also kein Web-Install? Zur Not nehm ich die 4 Stunden mal in Kauf, aber das ist schon 'viel' Zeit, da ich im Monat nur 60 zur Verfügung habe

    Edit: Ich glaube, mein Gedanke wurde nicht ganz klar. Ich hätte schon Zugriff unter der Woche zu einem DSL-PC, nur weiß ich nicht, ob das klappt, wenn ich mir die 93MB dann in das 'Installationsverzeichnis' lade, und mir das dann auf CD brenne. Weiß ja nicht, ob man da einen Installer herunterlädt oder das gleich "installiert hat".

    Wieviel kostet dich denn eine Stunde? Nehm das mal 4 und überleg dir ob die paar Euros so ne klasse Entwicklungsumgebung wert sind.



  • c.rackwitz schrieb:

    Aufgabe:
    schreibe ein programm in ansi c oder c++ unter zuhilfenahme von Win32API funktionen, das jeden neuen prozess mit angegebenem namen auf eine angegebene prioritaet setzt.
    beispielaufruf: <programm> <prioritaet> <prozessname>
    prioritaeten sollen mindestens als wort (idle, normal, high, realtime) angebbar sein.

    das hat windoof schon eingebaut. starte cmd.exe und gib ein 'help start'



  • start /B vermurkst aber leider die ein/ausgabe und ohne den schalter bekomme ich ne neue konsole (will ich aber nicht).



  • prozessenumeration:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/process_enumeration.asp

    in ein paar tagen poste ich meine eigene loesung, also beeilt euch.



  • Brutus schrieb:

    Kann man das ganze nicht direkt herunterladen, also kein Web-Install?

    Manueller Download als CD-Images, allerdings nur englisch.



  • kleine info fuer alle, die gerade dran arbeiten:
    ich habe bereits mein eigenes konsolentool geschrieben und es funktioniert schon. ich baue noch ein paar extra funktionen ein und dann ist die sache buendig.

    was ich spaeter gerne noch einbauen wuerde, sind systemweite hooks auf NtCreateSection, damit ich nicht alle x millisekunden die prozessliste enumerieren und auf veraenderungen vergleichen muss. das geht naemlich ziemlich auf die ressourcen (1-2% cpulast allein fuer so ein tool ist zu viel) aber dazu gehts tief in die kerneltreiberprogrammierung. gluecklicherweise gibts in dem oben verlinkten artikel auch noch einen link auf ein tutorial und ich habe hier ein paar buecher zu dem thema...

    also wer grad etwas bastelt, soll ruhig weitermachen. ich will alle versionen sehen.



  • c.rackwitz schrieb:

    start /B vermurkst aber leider die ein/ausgabe und ohne den schalter bekomme ich ne neue konsole (will ich aber nicht).

    starte das fenster davor mit start blabla /LOW. wasauchimmer das sein mag. ne IDE für python?



  • volkard schrieb:

    c.rackwitz schrieb:

    start /B vermurkst aber leider die ein/ausgabe und ohne den schalter bekomme ich ne neue konsole (will ich aber nicht).

    starte das fenster davor mit start blabla /LOW. wasauchimmer das sein mag. ne IDE für python?

    wozu sollte ich ne IDE fuer python benutzen wollen? ich hab meinen editor und meine konsole.

    ich habe start /? gelesen und alle schalter probiert. es ist nicht das gewuenschte verhalten dabei, okay?
    ausserdem kann ich mir ein passendes tool im handumdrehen schreiben, wenn ich das nicht schon irgendwann mal getan hab und nur noch suchen muss...
    die idee dieses projektes ist es, sich diese praefixnummer zu sparen und einfach auszufuehren. das programm im hintergrund verstellt dann einfach die prioritaet. einen start-aehnlichen loader habe ich naemlich schon laengst geschrieben, nur wollte ich dieses gefrickel nicht, immer ein "start /LOW" oder "loader -pri idle" davorzusetzen.



  • Wieso prüfst du die Liste so oft ab? Würde 2mal pro Sekunde nicht vollkommen reichen?



  • [quote="c.rackwitz"]

    volkard schrieb:

    c.rackwitz schrieb:

    start /B vermurkst aber leider die ein/ausgabe und ohne den schalter bekomme ich ne neue konsole (will ich aber nicht).

    starte das fenster davor mit start blabla /LOW. wasauchimmer das sein mag. ne IDE für python?

    wozu sollte ich ne IDE fuer python benutzen wollen? ich hab meinen editor und meine konsole.
    [quote]
    wenn du ne konsole hast, versteh ich dein problem nicht. ka, wozu eine ide, ich benutze für so sprachen auch keine.
    ich benutze zwei fenster, ein konsolenfenster, wo ein wächter läuft, das das verzeichnis überwacht und bei änderung das prog einfach startet. und ein editorfenster, wobei es im editor kein run oder so gibt, sondern abspeichern reicht, der wächer erkennt das ja und startet schon den testlauf.

    ich habe start /? gelesen und alle schalter probiert. es ist nicht das gewuenschte verhalten dabei, okay?

    nein, nicht ok.

    ausserdem kann ich mir ein passendes tool im handumdrehen schreiben, wenn ich das nicht schon irgendwann mal getan hab und nur noch suchen muss...

    nicht gut. der weihnachtsmann braucht deine hilfe beim geschenke-sortieren und du baust nutzlose tools. ist doch klar, daß da jemand sagt, daß es mit start /LOW auch geht.

    nur wollte ich dieses gefrickel nicht, immer ein "start /LOW" oder "loader -pri idle" davorzusetzen.

    könnten wir mal feststellen, daß immer die größten frickler immer frickeln reden? das ist wie mit dem spaghetti-code, den immer nur die leute als argument genommen haben, die ihn selber schrieben.

    du sollst nicht "start /LOW bla" jedesmal eingeben, wenn du in der konsole einen neuen testlauf startest, sondern du sollst die ganze konsole mit "start /LOW cmd" starten.



  • Hab den Beitrag hier zwar n bisschen spät gelesen - aber trotzdem ... 😉

    Hier is n Programm, dass ich vor ner halben Ewigkeit mal geschrieben habe. Sollte eigentlich alles machen, was ihr möchtet.
    Download: http://rapidshare.de/files/9995671/PriorityWatcher.zip.html

    Greetz


Anmelden zum Antworten