Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#1

TThread: MainThreadsynchronisation ohne Synchronize

  Alt 4. Sep 2008, 20:36
Ich weiß der Andreas hat da auch was. Aber ich will auch mal!

Ich habe eine weitere Möglichkeit zusammengebaut um einen Thread (A) mit einem Thread (B) zu snychronisieren. Dies geht aber nur ausschließlich dann, wenn der Thread A von Thread B aus gestartet wurde. Weitere "Quersynchronisationen" sind nicht möglich. Gedacht ist es um einfach einen speziellen Thread mit dem Mainthread zu synchronisieren. Dabei wurde dieser spezielle Thread auch vom MainThread gestartet. (Ich hoffe soweit ist alles klar)

In der Unit im Anhang liegt die Klasse TThreadEx, welche von TThread abgeleitet ist. Die Anwendung erfolgt über die beiden Methoden StopMainThread und ContinueMainThread:
Delphi-Quellcode:
//alles wie gehabt bei TThread:
type TmyThread=class(TThreadEx)
       protected
         procedure Execute; override;
       ...
     end;
  
...

procedure TmyThread.execute;
begin
...
    
    stopmainthread; //Hier wird der MainThread angehalten und man kann auf Variablen etc. des Mainthreads zugreifen
    try
      form1.memo1.lines.add('Hallo MainThread');
    finally
      continuemainthread; //und jetzt darf der MainThread auch wieder weitermachen
    end;
...

end;
Was sind die Vorteile gegenüber synchronize:
  1. man braucht nicht diesen umständlichen Aufruf von Synchronize, bei dem keine Variablenübergabe möglich ist
  2. diese Variante funktioniert auch in einer DLL (synchronize nicht)

Es war einfach eine Idee von mir, die ich mal ausprobieren musste. Bei meinen Versuchen klappt es ohne Probleme.


Edit 1+2: neue Version, jetzt würde der Mainthread auch bei einem plötzlichen Ende (Exception, Error) des SubThreads weiterlaufen
Angehängte Dateien
Dateityp: pas uthreadex_480.pas (3,6 KB, 57x aufgerufen)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat