У меня есть приложение Delphi 6, которое использует набор компонентов ICS для связи через сокеты. У меня есть свой собственный компонент VCL сокета сервера, который создает клиентские сокеты TWSocket, когда новый сеанс становится доступным. У клиентских сокетов, которые я создаю, свойству Multithreaded установлено значение TRUE, но все, что он делает, это изменяет способ обработки клиентскими сокетами сообщений сокетов таким образом, который является безопасным для фонового потока (не основного потока VCL). TWSocket не создает поток для обработки трафика данных сокета, что мне и нужно.
Мне нужно, чтобы входящие вызовы происходили из основного потока VCL, основного потока пользовательского интерфейса, потому что входящие данные в сокет клиента - это аудиоданные, которые должны обрабатываться быстро, за 50-100 миллисекунд или менее. Другими словами, один сбой в основном потоке VCL и аудиопотоке прерывается. Вот почему я хочу отправить событие OnDataAvailable (), которое возникает, когда входящие данные доступны, в фоновом потоке с высоким приоритетом. Другими словами, я хочу принудительно запустить цикл обработки сообщений, принадлежащий клиентскому объекту TWSocket, в фоновый поток.
Я считаю, что могу сделать это, создав сокет клиента через фоновый поток, но я надеюсь избежать этого, поскольку в настоящее время я использую созданный мной компонент VCL, который действует как сервер сокетов. Это объект, который принимает входящее соединение и порождает клиентские сокеты. Сервер сокетов создается в основном потоке VCL.
Поэтому мой вопрос заключается в том, существует ли (относительно) простой способ создания клиентских сокетов, чтобы они использовали существующий фоновый поток для обработки своих сокетов, особенно обработки сообщений FD_RECV? Если не существующий фоновый поток, то я создам один для каждого клиентского сокета, который я создаю, но мне нужно знать, как убедиться, что новый объект TWSocket использует этот фоновый поток, когда он запускает свой цикл сообщений, который обрабатывает сообщения сокетов, так как Я так делаю?