Grundlagen zu Threads

  • Kern des Threads ist die Execute-Methode, diese wird nach Starten des Threads abgearbeitet
  • void __fastcall MyThread::Execute()
    {
         // Hier steht der Code der vom Thread abgearbeitet wird 
    } 
    
  • Alle Methoden, die im Thread aufgerufen werden und auf VCL-Elemente zugreifen, sollten der Methode Synchronize übergeben werden. Dies ist sehr wichtig, damit alle Zugriffe etc. synchron mit dem Hauptthread der VCL verlaufen:
  • Synchronize(DieMethode);
    
  • man kann im Konstruktor angeben, ob der Thread sofort nach dem Erzeugen des Objektes losläuft, oder ob der Thread zunächst ruht:
  • MyThread = new TThread(true); // Thread ist erstmal stillgelegt (suspended = true)
    
    oder
    
    MyThread = new TThread(false); // Thread läuft sofort los
    
  • Thread-Priorität festlegen:
  • MyThread->Priority = Prioritäts-Stufe // Prioritäts-Stufe kann sein tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical
    
  • Thread Starten/Anhalten:
  • MyThread->Resume(); // startet den Thread
    
    MyThread->Suspend(); // hält den Thread an
    
  • Thread beenden:
  • MyThread->Terminate();
    
  • will man eine gewisse Routine beim Beenden des Threads durchlaufen, muss man diese dem OnTerminate-Ereignis des Threads zuweisen:
  • MyThread->OnTerminate = ThreadOnTerminate; // dem Thread die Methode ThreadOnTerminate zu, die ausgeführt wird, sobald das Ereignis OnTerminate eintritt
    
  • Thread nach dem Beenden gleich freigeben:
  • FreeOnTerminate = true; // im Konstruktor des Threads oder nach der Erzeugung kann man angeben ob der Thread bei Terminierung freigegeben werden soll