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

2024-03-06

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

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

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

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 奇怪的跨线程 UI 错误

    我正在编写一个 WinForms 应用程序 它有两种模式 控制台或 GUI 同一解决方案中的三个项目 一个用于控制台应用程序 一个用于 UI 表单 第三个用于保存两个界面也将连接的逻辑 控制台应用程序运行绝对流畅 保存用户选择的模型 它有一
  • 多线程Spring-boot控制器方法

    因此 我的应用程序 spring boot 运行速度非常慢 因为它使用 Selenium 来抓取数据 处理数据并显示在主页中 我遇到了多线程 我认为它对我的应用程序很有用 可以让它运行得更快 但是教程似乎显示在带有 main c 的普通 j
  • Delphi中使用FindVCLWindow调用WinHelp32(WinXP Pro SP3 32bit)

    有什么问题吗 procedure TForm1 VCLHelpClick Sender TObject var Ctrl TWinControl begin Ctrl FindVCLWindow Mouse CursorPos if Ctr
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 如何比较枚举类型集

    从某个时刻开始 我厌倦了编写设定条件 and or 因为对于更多的条件或更长的变量名 重新编写会变得笨拙且烦人 所以我开始写助手这样我就可以写ASet ContainsOne ceValue1 ceValue2 代替 ceValue1 in
  • Erlang gen_tcp 连接问题

    简单的问题 这段代码 client gt SomeHostInNet localhost to make it runnable on one machine ok Sock gen tcp connect SomeHostInNet 56
  • 关于java中的生产者和消费者模式与阻塞队列方法

    我正在研究有关java中线程的生产者和消费者设计模式 最近我在java 5中进行了探索 并介绍了Java 5中BlockingQueue数据结构的介绍 现在它变得更简单了 因为BlockingQueue通过引入阻塞方法隐式地提供了这种控制p
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 什么是 SO_SNDBUF 和 SO_RCVBUF

    你能解释一下到底是什么吗SO SNDBUF and SO RCVBUF选项 好的 出于某种原因 操作系统缓冲传出 传入数据 但我想澄清这个主题 他们的角色 通 常 是什么 它们是每个套接字的缓冲区吗 传输层的缓冲区 例如 TCP 缓冲区 和
  • 如何在表单上绘制半透明图像?

    我想在 Delphi 窗体上绘制半透明图像 但由于某种原因它不起作用 Here is the original PNG border is semi transparent 我将图像加载到TImage object Image1 Trans
  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • numba 函数何时编译?

    我正在研究这个例子 http numba pydata org numba doc 0 15 1 examples html multi threading http numba pydata org numba doc 0 15 1 ex
  • 通过 ruby​​ 进程共享变量

    我正在编写一个 gem 其中我必须分叉两个进程来启动两个 webrick 服务器 我想通过基类的类方法启动该服务器 因为应该只运行这两个服务器 而不是多个服务器 在运行时 我想调用这两台服务器上的一些方法来更改变量 我的问题是 我无法通过基
  • Delphi 的内存分析工具?

    我建立了一个项目并运行它 然后在 Process Explorer 中查看它 结果发现它在启动时使用的 RAM 比我想象的要多 5 倍 现在 如果我的程序运行得太慢 我会将其连接到分析器并让它告诉我什么正在使用我的所有周期 有没有类似的工具
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • Python 无法使用套接字绑定我的外部/公共 IP 地址,给出错误但是当使用本地 IP 地址时,错误不会显示

    这是出现主要错误的代码 与我的本地 IP 的绑定将起作用 s bind 192 168 1 4 port 与我的公共 IP 的绑定失败并出现以下错误 s bind 99 99 99 99 port WinError 10049 请求的地址在

随机推荐

  • base.html 中的 Django 变量

    base html用作所有其他页面的基本模板 base html有导航栏 在导航栏中 我想显示用户收到的消息数 因此 我需要一个像这样的变量 number of messages in the base html 但是 我应该如何将这个变量
  • 使用 sqlplus 连接到 Oracle 数据库

    我在 Unix 环境中使用以下命令连接 Oracle 数据库 sqlplus test test DESCRIPTION ADDRESS LIST ADDRESS PROTOCOL TCP HOST hostname com PORT 15
  • 无返回值的条件运算符

    我有这个代码 bool value false if value Console Write true else Console Write false 我想通过使用条件运算符来缩短它 但我找不到正确的语法 bool value false
  • 批处理文件保留十行之一

    我有一个包含 n 行的文件 n 超过 1 亿 我想输出一个仅包含 10 行中的 1 行的文件 我无法将文件分成十部分并只保留一部分 因为它必须更加随机 后来我必须进行统计分析 我不能在数据中产生强烈的偏差 我正在考虑读取文件 并为每条记录如
  • Kubernetes 仪表板显示未经授权

    我使用 KUBEADM 工具 IN LOCAL 配置了具有 1 个主节点和 4 个工作节点的 kubernetes 集群 所有节点都运行良好 部署了一个应用程序并能够从浏览器访问该应用程序 我尝试了很多方法使用 kubectl 创建仪表板
  • 如何在 Xcode 中将 OpenSSL 与我的应用程序静态链接?

    我正在使用使用 OpenSSL 加密库的第三方代码 自 OSX 10 7 起 Apple 已弃用 OpenSSL 转而采用他们自己的解决方案 由于我没有加密编码经验 因此我无法移植第三方代码以使用通用加密 因此 为了防止 Apple 稍后可
  • 如何删除字符串中的尾随空格和嵌入空格?

    我正在编写一个程序 将国内和国际帐号转换为 IBAN 号码 首先 我需要形成一个字符串 银行 ID 分行 ID 帐号 ISO 国家 地区代码 这些字段中可能存在尾随空格 但并非每个帐号都具有相同的长度 有些帐号具有分支标识符 而其他帐号则没
  • shared_ptr 析构函数、复制和不完整类型

    我有一个头文件foo h像这样 无关的东西省略 pragma once include
  • 互换使用 str 和 String

    假设我正在尝试使用 Rust 做一个奇特的零拷贝解析器 str 但有时我需要修改文本 例如实现变量替换 我真的想做这样的事情 fn main let mut v Vec lt str gt Hello there world split w
  • 单行 FFMPEG cmd 合并视频/音频并保留两个音频

    我有一个项目需要将视频文件与另一个音频文件合并 预期输出是一个视频文件 其中包含实际视频中的音频和合并的音频文件 输出视频文件的长度将与实际视频文件的大小相同 是否有单行 FFMPEG 命令可以使用 copy 和 map 参数来实现此目的
  • Android 上的 OkHttp PublicKey 固定

    有谁知道我们如何使用 OkHttp3 实现公钥固定 一直在阅读有关 SSL 固定的内容 我发现我们可以使用证书固定或公钥固定 后者似乎更灵活 来实现 但我只能找到例子证书固定 https github com square okhttp w
  • WSL (Ubuntu):如何从 bash 终端在浏览器中打开 localhost

    我正在尝试打开http localhost http localhost在 WSL bash 终端的 任何 浏览器中 到目前为止我已经尝试过 如何从 URL localhost 3000 的终端打开 Google Chrome https
  • iOS 的日志框架? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 iOS 是否有一个日志框架可以帮助开发人员诊断应用程序崩溃 您可能喜欢 伐木工人 https gith
  • Bootstrap 网格列相互重叠

    我对 Bootstrap 的网格布局和其中的列重叠有疑问 我不确定问题到底是什么 任何建议将不胜感激 谢谢 div class container div class row div class col md 6 img src conte
  • 错误提示“.class 文件中的版本错误”

    我使用了JSP代码并在tomcat5 5服务器下执行了相同的操作 它工作被罚款 现在我已经将相同的代码复制到其他系统的tomcat服务器下 但是在提交该 jsp 文件时 收到以下错误 导致错误的原因可能是什么 请指教 root cause
  • 使 d3.js 可视化布局响应式的最佳方法是什么?

    假设我有一个直方图脚本 可以构建 960 500 svg 图形 我如何使其响应 以便调整图形宽度和高度是动态的
  • 如何快速学习Java RMI [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个 Java 应用程序 我已经开发了一两年了 我想创建一组非常简单的接口 以后可能会增加复杂性 我可以使用它从另一个 JVM 例
  • Jmeter - 如何向计数器添加前缀。类似于随机变量

    目前 在随机变量中 我可以在变量的输出格式中添加前缀或后缀 然而 这个很好的功能不适用于简单的计数器控制器 每次使用变量时连接 string counter 对我来说并不是一个好的选择 因为我经常这样做 有没有办法以随机变量的方式实现前缀
  • 对内置数据类型使用前向声明

    我明白 只要有可能 我们就应该使用前向声明而不是包含来加快编译速度 我有课Person像这样 pragma once include
  • 如何将 TWSocket 的 OnDataAvailable() 事件推送到 Delphi 6 应用程序中的后台线程?

    我有一个 Delphi 6 应用程序 它使用 ICS 组件套件进行套接字通信 我有自己的服务器套接字 VCL 组件 当新会话可用时 它会创建客户端 TWSocket 套接字 我创建的客户端套接字确实将 Multithreaded 属性设置为