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 👍


Anmelden zum Antworten