Also ich kapsle einen String in einer Klasse. Das ist bestimmt oversized, aber bisher hatte ich damit keine Probleme...
(Das hier ist allerdings aus dem Gedächtnis)
Delphi-Quellcode:
Type
TStringContainer = Class
Public
MessageString : String;
Constructor Create (aMessage : String);
End;
Constructor TStringContainer.Create (aMessage : String);
Begin
MessageString := aMessage
End;
...
Procedure TMyThread.SendAString (AString : String);
Begin
PostMessage(MainHandle, WM_STRING, Integer(TSTringContainer.Create(aString)),0);
End;
...
Procedure TMainTask.ReceivStringMessageHandler (Var Msg : TMessage);
Begin
DoSomethingWith(TStringContainer(Msg.wParam).MessageString);
TStringContainer(Msg.wParam).Free
End;
Is das ok so?
Nachtrag: Da mir das mit der Referenzzählung bei Strings nicht geheuer ist, mache ich das so.
@Sir Rufo: Threads mit FreeOnTerminate habe ich mir abgewöhnt, denn wenn ich die Anwendung beende und der Thread noch im Speicher rumfleucht, bekomme ich jedesmal eine schöne
Exception, denn der Code zum Terminieren eines Threads baut darauf auf, das die Classes.pas noch nicht ihren finalize-Teil durchlaufen hat.