- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在使用 Borland/Embarcadero TClientSocket
组件时遇到了明显的句柄泄漏问题。我有一个创建多个 TThread
实例的应用程序,每个实例动态创建一个 TClientSocket
对象,连接到它的目标发送一些消息然后被删除。然后删除 TThread
实例(使用 FreeOnTerminate = true
)设置。我知道这是低效的,但它完全符合应用程序的需要——TThread
实例的最大数量限制为 32。我看到的问题是有一个明确的我可以通过任务管理器看到的 windows Handle 泄漏问题。为了隔离问题,我在单线程意义上应用了相同的问题,只是动态创建一个 TClientSocket
对象,并在主 VCL 线程的单个循环中完成时再次删除它。这表现出相同的句柄泄漏问题。我知道该组件已被弃用,我知道我正在做的事情效率低下,但我不明白为什么会出现句柄泄漏。在删除 TClientSocket
对象之前,是否需要对其执行任何操作以消除此句柄泄漏,或者这是组件中的错误?我在非阻塞模式下使用套接字并将事件处理程序分配给 OnConnect
OnDisconnect
和 OnSocketError
。
最佳答案
我已经使用TClientSocket
多年,包括在主线程和工作线程中的使用,我从未见过TClientSocket
泄漏任何句柄。
但是,TClientSocket
默认为非阻塞模式,在该模式下它使用 AllocateHWnd()
创建一个隐藏窗口来接收套接字事件,并且 AllocateHWnd()
不是线程安全的。在没有看到您的实际代码的情况下,这可能是您在工作线程代码中看到的泄漏的原因。解决方案就是不使用 TClientSocket
在工作线程中使用时是非阻塞模式。而是在阻塞模式下使用它。无论如何,这更适合基于线程的逻辑。
但是,这并不能解释您在主线程代码中看到的泄漏。我怀疑 TClientSocket
实际上是罪魁祸首,同样,在没有看到您的实际代码的情况下,很难确定。
关于C++ 应用程序使用多个 TClientSocket 实例导致 Windows 句柄泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15371271/
有这样的事吗?它需要是异步的(没有Indy)。 最佳答案 尝试HPScktSrvr-http://www.torry.net/pages.php?id=220#939383 关于delphi - 使用
我有一个 TserverSocket 和许多 TClientSocket。A 可以将所有客户端的文本发送到服务器并正确接收它。但问题是如何将不同的数据从 TServerSocket 发送到许多不同的客
我一直在尝试设置从 ReceiveText TClientSocket 函数恢复的字符数量的长度,但似乎没有任何效果。例如,从恢复的数据或其他数据流接收第一个最左边的字符。有没有办法在 Delphi
我正在尝试在运行时创建 TClientsocket,但无法分配事件。 我用 var cs:TCLIENTSOCKET; procedure OnReadx; begin end; procedur
我使用此代码来接收数据:但这不行。你能帮我吗? procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomW
大家好,我的任务是实现与服务器通信的协议(protocol)。我有一个难题,也许足够熟练的人可以启发我。当我连接到服务器时,我必须发送一个字节数组问题是当我使用它时我从服务器断开了 imediatle
在 resolution comments错误报告 12266 (“套接字连接错误导致资源泄漏”),Robert Ehteshamzadeh 写道 TClientSocket is deprecate
因此,我有一个 TClientSocket,它必须在一个 OnRead 事件中接收超过 10KB 的数据。但是,当事件被触发时,它只会获得 8KB 的数据,然后事件会再次触发并包含其余数据。 为什么会
我在使用 Borland/Embarcadero TClientSocket 组件时遇到了明显的句柄泄漏问题。我有一个创建多个 TThread 实例的应用程序,每个实例动态创建一个 TClientSo
在经历了 Eclipse、Emacs、Visual Studio 和记事本之后,我才开始熟悉 Embarcadero RAD Studio 2010 :) 我正在进入相当大的 C++ 应用程序(500
是否有一个解决方案可以在delphi的ScktComp.dcu中使用TServerSocket,让我可以将单个文件流或多文件流同步发送到多TClientSocket ...?我这里有这段代码: pro
有人可以解释一下他们的差异吗?它们相同并且工作方式相同吗?哪一个比其他组件更好? 最佳答案 它们不一样,而且工作方式也不同。它们对套接字 API 交互、事件处理、错误处理等采取非常不同的方法。 TCl
我正在尝试在多线程 C++ Windows 应用程序中以非阻塞模式使用 Borlands TClientSocket 组件。我正在创建多个线程(派生自 TThread 的类),每个线程都创建自己的 T
我是一名优秀的程序员,十分优秀!