我有一个Delphi 6应用程序,它使用ICS组件套件进行套接字通信。我有自己的服务器套接字VCL组件,它在新会话可用时创建客户端TWSocket套接字。我创建的客户端套接字将多线程属性设置为TRUE,但所做的只是将客户端套接字处理套接字消息的方式更改为不受后台线程(非主VCL线程)影响的方式。TWSocket不生成一个线程来处理套接字数据通信,这正是我所需要的。
我需要让接收呼叫发生在主VCL线程上,主用户界面线程,因为传入客户端套接字的数据是音频数据,需要在50-100毫秒或更短的时间内快速处理。换句话说,主VCL线程和音频流上的一次打嗝就会中断。这就是为什么我希望将OnDataAvailable()事件推送到高优先级的后台线程,当传入数据可用时,该事件就会触发。换句话说,我希望将属于客户端TWSocket对象的消息处理循环强制到后台线程。
我相信我可以通过后台线程创建客户端套接字来做到这一点,但我希望避免这样做,因为目前我使用了我制作的VCL组件,它充当了套接字服务器。这是接受传入连接并生成客户端套接字的实体。套接字服务器在主VCL线程上创建。
因此,我的问题是,是否有一种(相对)简单的方法来创建客户端套接字,以便它们使用现有的后台线程进行套接字处理,特别是FD_RECV消息处理?如果不是现有的后台线程,那么我将为我创建的每个客户端套接字创建一个,但我需要知道如何确保新的TWSocket对象在运行处理套接字消息的消息循环时使用该后台线程,那么我将如何做到这一点?
发布于 2011-12-02 16:05:48
对于其他ICS/TWSocket用户,解决方案是在软件包附带的ICS ThrdSrv演示项目中实现的。仔细看看这个项目,特别是它对ThreadAttach()和ThreadDetach()方法的使用。该示例项目演示如何创建具有在工作线程上下文中运行的消息泵的客户端套接字。
https://stackoverflow.com/questions/8352818
复制相似问题