Einzelnen Beitrag anzeigen

Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Multi/Dualthreading - Laufzeit: Strings Thread -> VCL

  Alt 20. Mär 2008, 18:59
Ich hoffe, du hast nichts gegen unsaubere Lösungen, die funktionieren...
Delphi-Quellcode:
//In der Thread-Funktion:
String(PointerVar) := StringVar; //Referenzzähler erhöhen - unser String darf nicht gelöscht werden!
PointerVar := nil;
PostMessage(Form1.Handle, WM_MYMESSAGE, 0, Integer(StringVar));

//Im Formular:
procedure TForm1.RecvMyMessage(var Message: TMessage);
var Lok: string;
begin
  Pointer(Lok) := Pointer(Message.LParam); //Referenzzähler nicht erhöhen, das ist in der Thread-Funktion getan worden
  Label1.Caption := Lok;
  //Referenzzähler wird automatisch dekrementiert
end;
Diese Technik hat den Vorteil, dass deine Thread-Funktion fast überhaupt nicht aufgehalten wird. Wenn dir Sauberkeit wichtig ist, kannst du auch SendMessage verwenden und brauchst dann die Referenzzählung nicht zu manipulieren.

@Roter Kasten: Dax, wie langweilig. 8)
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat