Main prozess priority einstellen

Hi Leute,

ich habe ein main in dem ich mehrere Threads erzeuge, die dann ihre entsprechende Arbeit erledigen. Im main warte ich dann mit _getch() nur auf eine Taste zum Beenden des Programmes. Leider zieht dieses Warten unter NT die ganze Rechenleistung runter. Der Taskamanger zeigt so 90% für den Prozess an. Was kann ich machen?

Marc

Hi,

ich habe ein main in dem ich mehrere Threads erzeuge, die dann
ihre entsprechende Arbeit erledigen. Im main warte ich dann
mit _getch() nur auf eine Taste zum Beenden des Programmes.
Leider zieht dieses Warten unter NT die ganze Rechenleistung
runter. Der Taskamanger zeigt so 90% für den Prozess an. Was
kann ich machen?

Mit NT kenn ich mich leider nicht so toll aus (vermutlich kriegst Du hier demnaechst also noch ne bessere Antwort).
Die einfachste Loesung besteht darin in Deiner Schleife ein sleep(1) einzufuegen, dann fragt er nur einmal pro Sekunde ab. Wenn Du oefter abfragen willst musst Du eine andere funktion verwenden, da sleep nur ganze Sekunden erlaubt.
Ich glaube mit scanf() kannst Du das Programm auch ganz einfach aufhaengen, bis return gedrueckt wird.
Wenn Du es eleganter haben willst, kannst Du das Programm auch mit den Threads kommunizieren lassen. Unter Unix kann man das mehr oder weniger elegant mit (named) pipes oder files in /prog machen. Wenn Du es ganz elegant haben willst, kannst Du auch Semaphoren benutzen (so machens die Profis meist, ist aber nicht ohne und auch nicht ungefaehrlich …). Fuer sowas brauchst Du aber NT-spezifische Funktionen, da das den Kernel unmittelbar betrifft.
Unter Unix koenntes Du z.B. auch select zum Schlafen verwenden (ist zwar nicht dafuer gedacht, eignet sich aber gu dafuer). Select ist ebenfalls sehr hilfreich um an pipes zu lauschen. Man kann das Program damit so lange Schlafen lassen, bis was kommt. Die Funktion poll ist eine neuere (und Anwenderfreundlichere) Variante, mit der sich dasselbe erreichen laesst. Ich vermute, dass man damit auch an stdin lauschen kann (habs aber noch nicht probiert). Ich schaetze, es gibt unter NT aehnliche Funktionen (das ganze ist unter Unix ueber den Kernel implementiert und kostet praktisch null ressourcen … feine Sache).

Gruss

Thorsten

Hi,

Die einfachste Loesung besteht darin in Deiner Schleife ein
sleep(1) einzufuegen, dann fragt er nur einmal pro Sekunde ab.

Dann wohl besser ein Sleep(1000)… der gleich die elegantere Methode:

Über GetCurrentThread() das Thread-Handle im Main-Thread abfragen und dann mit SetThreadPriority() die Priorität z. B. auf THREAD_PRIORITY_LOWEST setzen.

–Mathias Ricken

Über GetCurrentThread() das Thread-Handle im Main-Thread
abfragen und dann mit SetThreadPriority() die Priorität z. B.
auf THREAD_PRIORITY_LOWEST setzen.

Danke. Hört sich gut an. Werds mal probieren.

Marc