IdFTP Connected überwachen??



  • Hallo,

    ich möchte in einer Anwendung per Thread den Status von meiner IdFTP Komponente überwachen, also sprich ob sie connected ist. Und solange sie connected ist, solange soll ein bestimmtes Image auf visible=true gesetzt sein.

    Das Ganze habe ich so in der ThreadUnit umgesetzt:

    void __fastcall ThreadFTPConnected::Execute()
    {
    	//---- Thread-Code hier platzieren ----
    
    	while(Application->Terminated == false)
    	{
    		if (Form1->ftp1->Connected()==true)
    		{
    			Form1->Image2->Visible = true;
    		}
    		else
    		{
    			Form1->Image2->Visible = false;
    		}
    	}
    
    }
    

    Nur erzeugt das eine 99% Auslastung der CPU. Wie kann ich das "CPU-freundlicher" machen?

    Danke für die Hilfe.

    Gruß
    schmalhans



  • Wie währe es mit den Events: OnConnected und OnDisconnected?



  • BigNeal schrieb:

    Wie währe es mit den Events: OnConnected und OnDisconnected?

    Das schreit ja förmlich danach.

    @Autor: Warum so ne Schleife? Des wetiteren ist die VCL nicht thread-safe. Du kannst innerhalb des Threads nur auf Methoden unter der main zugreifen indem sie synchronisiert werden:

    //---------------------------------------------------------------------------
    void __fastcall MyThread::Execute()
    {
        SetName();
    
        while(!Terminated)
      {
        Synchronize(Compute);
      }
    
    }
    //---------------------------------------------------------------------------
    void __fastcall MyThread::Compute()
    {
    
          Form1->ClientReceived();     
    }
    //------------
    

    Früher oder später kommts da bei dir zum crash wenn du so weiter machst. Dein "Hauptprogramm" muss Ressourcen mit dem "Unterprogramm MyThread" teilen. Was passiert wenn beide die gleiche Ressource zur gleichen Zeit nutzen 😉 mach dir mal gedanken



  • Hmm... Da habt ihr natürlich recht, das hab ich nicht bedacht. Dankeschön für die Hilfe! 👍


Anmelden zum Antworten