Как я могу передать событие OnDataAvailable() TWSocket в фоновый поток в моем приложении Delphi 6?

У меня есть приложение Delphi 6, которое использует набор компонентов ICS для обмена данными через сокеты. У меня есть собственный VCL-компонент серверных сокетов, который создает клиентские сокеты TWSocket, когда новая сессия становится доступной. Создаваемые мной клиентские сокеты имеют свойство Multithreaded, установленное в TRUE, но все, что это делает, это изменяет способ обработки клиентским сокетом сообщений сокета на способ, безопасный для фонового потока (не основного потока VCL). TWSocket не порождает поток для обработки трафика данных сокета, что мне и нужно.

Мне нужно, чтобы вызовы приема происходили вне основного потока VCL, основного потока пользовательского интерфейса, потому что входящие данные на клиентский сокет - это аудиоданные, которые должны обрабатываться быстро, за 50-100 миллисекунд или меньше. Другими словами, одна заминка в основном потоке VCL - и аудиопоток будет прерван. Вот почему я хочу перенести событие OnDataAvailable(), которое срабатывает всякий раз, когда поступающие данные доступны, на фоновый поток с высоким приоритетом. Другими словами, я хочу заставить цикл обработки сообщений, принадлежащий клиентскому объекту TWSocket, перейти в фоновый поток.

Я полагаю, что могу сделать это, создав клиентский сокет через фоновый поток, но я надеюсь избежать этого, поскольку в настоящее время я использую сделанный мной компонент VCL, который действует как сервер сокетов. Это сущность, которая принимает входящее соединение и создает клиентские сокеты. Сервер сокетов создается в главном потоке VCL.

Поэтому мой вопрос заключается в том, есть ли (относительно) простой способ создать клиентские сокеты так, чтобы они использовали существующий фоновый поток для обработки сокетов, особенно для обработки сообщений FD_RECV? Если не существующий фоновый поток, то я создам его для каждого создаваемого клиентского сокета, но мне нужно знать, как убедиться, что новый объект TWSocket использует этот фоновый поток, когда он запускает свой цикл сообщений, который обрабатывает сообщения сокета, так что как бы я это сделал?

5
задан TZHX 25 September 2012 в 11:54
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: