Thread bringt 100%ige CPU-Auslastung!!! Warum?
-
Hallo,
ich habe in meinem Programm eine Anzeige der aktuellen Uhrzeit. Diese wird über einen Thread ausgelesen und in die Form geschrieben. Dabei steigt die CPU-Auslastung auf 100%. Ich habe auch schon die Priorität des Threads geändert. Ohne Erfolg!!!Hier mein Thread-Code:
fastcall TmyThread::TmyThread(bool CreateSuspended) : TThread(CreateSuspended) { FreeOnTerminate = true; Priority = tpLower; } //--------------------------------------------------------------------------- void TmyThread::SetName() { THREADNAME_INFO info; info.dwType = 0x1000; info.szName = "ZeitThread"; info.dwThreadID = -1; info.dwFlags = 0; __try { RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD),(DWORD*)&info ); } __except (EXCEPTION_CONTINUE_EXECUTION) { } } //--------------------------------------------------------------------------- void __fastcall TmyThread::Execute() { SetName(); //---- Thread-Code hier platzieren ---- while (!Terminated) { Synchronize((TThreadMethod)&Zeitanzeige); Zeitanzeige(); } } //--------------------------------------------------------------------------- void __fastcall TmyThread::Zeitanzeige() { TDateTime Zeit = Now(); FrmAuswahl->StatusBar1->Panels->Items[2]->Text = (String)Zeit; }Was kann ich tun um die Auslastung zu minimieren!!!
-
Baue in die Schleife ein Sleep(x) ein, mit x > 0. Sonst greift sich der Prozess alle CPU-Zeit, die er kriegen kann.
Außerdem darf Zeitanzeige nicht einfach so aufgerufen werden sondern mit Synchronize. Der cast (TThreadMethod) ist dabei imo überflüssig. Also:while (!Terminated) { Synchronize(Zeitanzeige); Sleep(100); }
-
Hallo,
erst mal DANKE für die Antwort. Ich habe ein Sleep(100) eingebaut und siehe da, nur noch eine CPU-Auslastung von 25-40%.Der cast (TThreadMethod) ist dabei imo überflüssig. ...
Das muß ich machen, da ich den BCB2006 benutze...
Danke
