Indy - TCPServer und Synchronize
-
Hallo,
kann mir jemand sagen, wie man Synchronize für die Threads des TIdTCPServers korrekt aufruft?
Bei meinen Versuchen hängt sich das Programm genau beim Synchronize auf, die UpdateMemo-Funktion wird gar nicht erreicht.Hier mal mein Beispielprojek (Memo, Button, TIdTCPServer, TIdTCPClient):
// in .h unter public: String buffer; void __fastcall UpdateMemo(); // .cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { IdTCPServer1->Active = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { IdTCPClient1->Connect(1000); if (IdTCPClient1->Connected()) { IdTCPClient1->SendCmd("TestTest"); IdTCPClient1->Disconnect(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::UpdateMemo() { Memo1->Text = buffer; } //--------------------------------------------------------------------------- void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread) { buffer = AThread->Connection->ReadLn("\r\n", 1000, 1000); AThread->Synchronize(&UpdateMemo); } //---------------------------------------------------------------------------
Ein eventuell damit zusammenhängende Frage: warum muss ich in Synchronize die Funktion als Referenz übergeben? Wenn ich das & weglasse beschwert sich der Compiler
E2285 Could not find a match for 'TIdBaseThread::Synchronize(void)'In den Newsgroups habe ich dazu den Tip gefunden, in IdThread.hpp die zweite Deklaration von Synchronize auszukommentieren (HIDESBASE void __fastcall Synchronize(const System::TMethod &Method)/ overload /;).
Damit kann ich zwar ohne das '&' kompilieren, das Programm hängt sich aber trotzdem beim Synchronize auf. Und ganz ohne Synchronize friert es natürlich auch ein.Danke im Voraus für alle Tips!