konsolenprogrammierung CPU-Auslastung zu hoch

Dezipaitor

Grünschnabel
ich schreibe derzeit unter MS VC++ an einem Server mit einer eingabe konsole :
d.h. dort kann man per befehl noch einige einstellungen machen usw.

aber die CPU auslastung ist durch die endlossschleife viel zu hoch
wie kann ich das anders machen ?

for (;;)
{
MSG message;
if (::PeekMessage(&message,NULL,0,0,PM_REMOVE))
{ ::TranslateMessage(&message);
::DispatchMessage(&message);
}

//Thread text ausgaben
if ((!islocked) && (StdOutput != ""))
{
islocked = TRUE;
cout << "\n" << StdOutput << "\n>>";
StdOutput = "";
islocked = FALSE;

}
else
//Benutzereingaben hier
if (kbhit())
{
cin >> in;
switch (HandleUserInputs(in) )
{
case 1 : return 0; break;
case 2 : ShowHelpScreen(); break;
default : cout << "\nUnbekannter Befehl : " << in;
}
cout << "\n>>";
}

THX
 
es liegt ganz offensichtlich an
kbhit() was die hohe auslastung erzeugt.

dies habe ich eingebaut, um einem thread der noch im hintergrund läuft die möglichkeit zu geben, ausgaben auf dem bildschirm zu bringen wann immer er will.

//Thread text ausgaben
if ((!islocked) && (StdOutput != ""))
{
islocked = TRUE;
cout << "\n" << StdOutput << "\n>>";
StdOutput = "";
islocked = FALSE;
}


wenn es eine möglichkeit gibt, ausgaben zu machen wann es nötig ist ohne kbhit zu verwenden. wäre ich dankbar.
 
die CPU wird gefordert bei einer schleife.. wenn die schleife zich mal durchläuft, zieht das ganz schön an rechenleistung...
 
Funktioniert getch() (is in conio.h) nicht auch für deine Zwecke?
Ist zwar ansi C aber vielleicht stört es dich nicht :)
 
ja würde natürlich gehen,
allerdings habe ich nun was ohne kbhit gefunden, nachdem ich rausgefunden hatte, dass zwar cout in threads keine ausgabe macht, dagegen printf funktioniert.

also brauche ich garnicht kbhit und alles mit //Thread Text ausgeben,
weil dies ja nun direkt aus dem thread geschieht.

muss man erstmal draufkommen:)
 

Neue Beiträge

Zurück