Hi!
ich hab hier irgendwie n blödes problem, das ich nich gelöst bekomm...
also ich erzeug in einer Funktion von FrmMain lokal einen TCPServer (TIdTCPServer; Indy). und zwar so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TFrmMain.TCPServerExecute(AThread: TIdPeerThread); var TTCPClient:TIdTCPClient; TCPThread:TTCPThread; TCPClient_number:integer; [..] begin [..] TCPClient:=TIdTCPClient.Create(Self); [..] |
dann (gleiche Funktion) hau ich nen Pointer von diesem TCPClient in eine TThreadlist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| try with TCPClients.LockList do begin Add(Pointer(TCPClient)); TCPClient_number:=Count-1; end; finally TCPClients.UnlockList; end; [..] |
und dann start ich nen Thread (immer noch gleiche Funktion):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| TCPThread:=TTCPThread.Create(True); TCPThread.FreeOnTerminate:=true; TCPThread.TCPClient_number:=TCPClient_number; [..] TCPThread.Resume; [..] TCPClient.Write(request); end; |
soweit geht noch alles. kurz danach schick ich ja noch ne Message mit dem TCPClient, der is also ansprechbar (ob die Message jetzt ankommt weiß ich net, aber das is jetzt au erstmal egal); es gibt auf jeden Fall keine Access Violation.
So. Und wenn der Thread gestartet is, dann tut der das (andere Unit):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| [...] TCPClient:^TIdTCPClient; [..]
procedure TTCPThread.Execute; begin try TCPClient:=TCPClients.Locklist.Items[FTCPClient_number]; finally TCPCLients.UnlockList; end; while not Terminated do begin if not TCPClient.Connected then [..] end; |
Und an der gekennzeichneten Stelle bekomm ich ne AccesViolation...

Also dieser TCPCLient is ne lokale Variable von TCPServerExecute, soll allerdings nacher in dem Thread-Execute verfügbar sein. wie bekomm ich das hin? Habs ja, wie gesehen mit ner globalen Liste, die nen Pointer beinhaltet versucht, aber geht net

also ich geb den TCPClient am ende der TCPServerExecute natürlich NICHT frei, das soll nacher auch das Thread-Execute übernehmen... Aber wie bekomm ich das hin? ich will TCPClient net Global deklarieren, da ich net bloß einen TCPClient brauch, sondern mehrere und zwar dynamisch...
MrSaint
P.S.: Soll am Ende n Proxy-Server für HTTP werden, deswegen Server
und Client Komponenten. Und die kommunikation soll ungefähr so aussehn:
Client <===> [ TCPClient <===> TCPServer ] <===> Web-Server
und das in den [ ] is mein programm... ich hoff das war jetzt net zu unverständlich
Moderiert von
MrSaint: Titel des Topics geändert
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Andrew S. Tanenbaum - Modern Operating Systems