读书人

线程中的 TClientSocket运行的机制?解

发布时间: 2012-02-09 18:22:27 作者: rapoo

线程中的 TClientSocket运行的机制???
从TThread下继承了一个 TFZThead.
在TFZThead中动态产生了一个TClientSocket对象。
在TClientSocket对象的OnRead事件中 写了 接收数据的代码。
问题是 我在TFZThead的Excute()函数中,就写了如下语句:
while (true)
{
Sleep(60000);

}
但是 还能一直收到 数据。
线程在 睡眠的 时候不是不 参与调度吗,怎么还会执行呢(指收到了数据)?
那么 还存在一种情况,就是TClientSocket对象的运行和 这个线程根本 就没有关系,它 是在 主线程中 执行的???
请 高手 解释!!!

[解决办法]
TClientSocket对象的OnRead是事件,接收数据不是在TFZThead的线程里,你的线程只负责产生它,接收数据是TClientSocket对象的OnRead事件中完成,与TFZThead无关
[解决办法]
建议使用 idtcpserver和idtcpclient
BCB6需要重新安装较新版本indy
[解决办法]
如果你是在线程的构造函数中创建TClientSocket,那么TClientSocket还是属于主线程,不属于这个线程。
如果你是在线程的Execute()中创建TClientSocket,那么TClientSocket属于这个线程,但是此时你无法使用OnRead来读取,必须将TClientSocket的ClientType设为ctBlocking

读书人网 >C++ Builder

热点推荐