Hallo zusammen!
Ich habe folgendes Problem:
Der
Indy HTTP Server erstellt anscheinend für jede Verbindung einen eigenen Thread und übergibt diesen in z.B. OnCommandGet als AThread. Also müßte man mit Synchronize arbeiten. Wie übergebe ich jedoch mit Synchronize Parameter oder erhalte results? Ein
einfaches Beispiel:
LoadMemo liegt auf dem Hauptformular, genau wie der HTTPServer.
Delphi-Quellcode:
LoadMemo.Clear;
LoadMemo.Lines.LoadFromFile('test.html');
AResponseInfo.ContentText := LoadMemo.Text;
Dies führt jedoch zu Exceptions wie "Text überschreitet Memo-Kapazität". Daher müßte man dies mit AThread.Synchronize aufrufen. Wie kann ich ihm jedoch den Parameter ('test.html') übergeben und wie bekomme ich das entsprechende result (hier: LoadMemo.Text);
In diesem Fall kann man natürlich mit einem zur Laufzeit erzeugten TMemo arbeiten. Dies ist unproblematisch. Jedoch ist das Problem komplexer:
Ich führe je nach übergebenen "Document" eine bestimmte Prozedur/Funktion am Server aus, die u.a. mit Querys Datenbankoperationen durchführt. Da hier gelegentlich Fehler auftauchen, die ich mir nicht erklären kann, führe ich diese auf die Thread-Problematik zurück. Wie kann man also Prozeduren und Funktionen mit Parameter innerhalb dieses OnGet-Threads aufrufen?
Macht evtl. ein extra Formular Sinn, auf dem die Querys liegen und welches dann von jedem Thread zur Laufzeit dynamsich erzeugt (not visible), die entsprechenden Funktionen ausgeführt und anschließend freigegeben wird? Ist ein solches Formular dann "Thread sicher"?
Ich bin sicher, Ihr wißt eine Lösungsmöglichkeit.
Vielen Dank.
MfG
..DocE