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