Wie Übergeben von Ausnahme von einem Thread zu einem anderen Thread (Aufrufer) in Delphi?

8

Ich habe eine andere Frage! Bitte schauen Sie sich dieses Beispiel an:

%Vor%

Alles, was ich will - ist eine Ausnahme in der TMyClass.Proc1 zu bekommen und es so zu werfen:

%Vor%

Bitte sag mir, wie kann ich so etwas machen? Vielen Dank!

oh! noch eine Sache - im Codieren auf Delphi 5, also habe ich keine "FatalException" -Eigenschaft von TThread oder etwas über ..

    
SomeOne 27.09.2010, 07:53
quelle

4 Antworten

17

Sie können AcquireExceptionObject() verwenden:

  

AcquireExceptionObject gibt einen Zeiger auf das aktuelle Ausnahmeobjekt zurück und verhindert, dass das Ausnahmeobjekt freigegeben wird, wenn der aktuelle Ausnahmebehandler beendet wird.

Dann können Sie den Zeiger zu einem anderen Thread senden und wenn Sie es dort anheben, wird es für Sie freigegeben, andernfalls müssen Sie ReleaseExceptionObject() , um es zu befreien.

    
Remko 27.09.2010 08:19
quelle
2

Kurz gesagt, Sie können das nicht so machen, wie Sie es möchten.

Sie müssen das Ausnahmeobjekt klonen, die Kopie an Ihren anderen Thread übergeben (z. B. mit der Synchronize-Methode oder mit einer anderen Synchronisationstechnik) und dieses Ausnahmeobjekt dort auslösen.

    
quelle
0

Am besten fangen Sie die Ausnahme in der Ausführungsschleife des Threads ab und schreiben die Nachrichteneigenschaft und den Klassennamen in ein privates Zeichenfolgenfeld. Dies kann dann öffentlich gemacht werden, indem eine Eigenschaft mit kritischen Abschnitten in den Gettern und Settern verwendet wird, um sicherzustellen, dass der Zugriff threadsicher ist. Alles, was Sie jetzt tun müssen, ist, in den Thread einen Prozess zu übergeben, der die Exception behandelt und sie mit einer Synchronisation aufruft. Ich werde einen Beispielcode posten, wenn ich zu meinem Computer komme, da ich im Moment mein iPhone verwende

    
MikeT 27.09.2010 22:23
quelle
-1

Ich mache so etwas nativ in meinem Multithread-Framework (http://www.csinnovations.com/framework_overview.htm).

    
Misha 20.02.2011 09:49
quelle

Tags und Links