gpt4 book ai didi

multithreading - 如何将 TWSocket 的 OnDataAvailable() 事件推送到 Delphi 6 应用程序中的后台线程?

转载 作者:行者123 更新时间:2023-12-03 15:13:11 25 4
gpt4 key购买 nike

我有一个 Delphi 6 应用程序,它使用 ICS 组件套件进行套接字通信。我有自己的服务器套接字 VCL 组件,当新 session 可用时,它会创建客户端 TWSocket 套接字。我创建的客户端套接字确实将 Multithreaded 属性设置为 TRUE,但所做的只是将客户端套接字处理套接字消息的方式更改为对后台线程(非主 VCL 线程)安全的方式。 TWSocket 不会生成线程来处理套接字数据流量,而这正是我所需要的。

我需要让接收调用发生在主 VCL 线程(主用户界面线程)之外,因为客户端套接字的传入数据是需要在 50-100 毫秒或更短时间内快速处理的音频数据。换句话说,主 VCL 线程出现故障,音频流就会中断。这就是为什么我想将每当传入数据可用时触发的 OnDataAvailable() 事件推送到高优先级后台线程。换句话说,我想将属于客户端TWSocket对象的消息处理循环强制到后台线程。

我相信我可以通过后台线程创建客户端套接字来做到这一点,但我希望避免这种情况,因为目前我使用我制作的充当套接字服务器的 VCL 组件。这是接受传入连接并生成客户端套接字的实体。套接字服务器在主 VCL 线程上创建。

因此我的问题是,是否有一种(相对)简单的方法来创建客户端套接字,以便它们使用现有的后台线程来进行套接字处理,特别是 FD_RECV 消息处理?如果不是现有的后台线程,那么我将为我创建的每个客户端套接字创建一个,但我需要知道如何确保新的 TWSocket 对象在运行处理套接字消息的消息循环时使用该后台线程,那么如何我这样做?

最佳答案

对于其他 ICS/TWSocket 用户,解决方案位于软件包附带的 ICS ThrdSrv 演示项目中。仔细查看该项目,尤其是它对 ThreadAttach() 和 ThreadDetach() 方法的使用。该示例项目展示了如何创建具有在工作线程上下文中运行的消息泵的客户端套接字。

关于multithreading - 如何将 TWSocket 的 OnDataAvailable() 事件推送到 Delphi 6 应用程序中的后台线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8352818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com