warten ohne Prozessor Auslastung?
-
Hallo,
ich muss eine Liste von Ereignissen abarbeiten. Es kann vorkommen, dass ich
dazwischen etwas warten muss (mal eine Minute, mal eine Stunde).Bisher mach ich das in etwa so:
int iWaitTime = 1000000; int iStartTime = GetTickCount(); while (iStartTime + iWaitTime > GetTickCount) { Application->ProcessMessages(); }ich hab alle Knöpfe die man nicht drücken darf gesperrt, darum kann ich
eigentlich ohne Probleme das Application->ProcessMessages() verwenden.Leider wird im TaskManager eine Auslastung von 100% angezeigt.
Ist es möglich das zu ändern, damit der Prozessor beim "nichts tun" nicht
so stark ausgelastet ist?
-
Sleep(ZeitinMillisekunden);
-
Also ich würde kein Sleep() nehmen weil
BCB-Hilfe schrieb:
You have to be careful when using Sleep and DDE. If a thread creates any windows, it must process messages. DDE sends messages to all windows in the system. If you have a thread that uses a wait function with no time-out interval, the system will deadlock. Therefore, if you have a thread that creates windows, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than Sleep.
-
Wie wäre es wenn Du Application->ProcessMessages nicht so oft aufrufen würdest. Ich würde es nur jeden 500en Durchlauf in der while-Schleife ausführen. (einfach ausprobieren bei welchem Wert die Anwendung bedienbar bleibt, aber die CPU-Last sinkt).
Ansonsten, hast Du Dir schonmal TTimer angesehen. Klingt irgenwie als wäre er für Deine Aufgabe prädestiniert.

-
Danke für die Antworten:
ShowMessage("Start"); MsgWaitForMultipleObjects(1,NULL,1, 10000, QS_TIMER); ShowMessage("Ende");ist genau das was ich gesucht habe. Gut damit wird die Form nichtmehr
geupdated, aber das kann ich ja alle 100 millisekunden selber machen.Ein Timer ist denkbar unpraktisch für meine Anwendung. Ich schreibe
etliche Befehle in eine Liste und führe diese aus. Wenn nun ein Befehl
"warten" ist will ich einfach an dieser Stelle eine weile warten.
Bzw. übernimmt das warten eine dll.