Hallo
Win32.API,
ich habe mir mein Wissen zum
Indy ThreadPool sicherheitshalber kurz bestätigen lassen, leider ist das was Du machen möchtest nicht möglich:
Der TIdTCPServer benötigt immer einen Thread pro Verbindung zu einem Client (Socket), wenn weniger Threads da wären, könnten die Clients nicht bedient werden. Wir sprechen hier also wirklich - mit und ohne ThreadPool - von einer 1:1 Relation. Das Pool Limit steuert nur die Anzahl
inaktiver Threads. MaxThreads limitiert die Anzahl aktiver Threads, aber dies ist wie erwähnt ein hartes Limit: Wird es überschritten, wird eine
Exception geraist und der Client wird unverzüglich disconnected.
Wenn Du jetzt weniger aktive Threads haben willst, kannst Du TIdTCPServer nicht nutzen, sondern mußt irgendeine non-blocking Server-Komponente nutzen oder Deinen eignenen Code für I/O Completion Ports schreiben.
Es gab einen Ansatz dies zu ändern, das
Indy SuperCore
Package. Hier sollte ein einzelner Thread durch die Nutzung von Fibers mehrere Clients bedienen. Leider wurde das
Package nie fertig gestellt und liegt seit Jahren nun herum.
Gruß Assertor