socket客户端使用阻塞模式,查了资料,说是要重载线程的Execute方法方法,文章在此http://geocom.hhcc.net.cn/magz/wk0202/7.htm。
小弟刚接触线程的编程,上面给出的代码不知该如何使用,望各位大侠给个详细的代码(代码框架也行),在主程序中又该如何处理?
问题解决后,立马给分。
小弟刚接触线程的编程,上面给出的代码不知该如何使用,望各位大侠给个详细的代码(代码框架也行),在主程序中又该如何处理?
问题解决后,立马给分。
解决方案 »
- DELPHI7 ADO ORACLE11g 连接的问题
- 学习windows API 需要什么基础 一般都用什么书入门为好
- 请问各位高手,这段代码有什么错误
- 关于二级域名解析问题 以前提问过但没能得到解决的方案 请高手们指点 谢谢了
- 怎么能把variant变量里的内容放到流里去。
- 快崩溃了,为什么delphi写的WEB SERVICE在C#下会出这样的错?
- 请教一个小问题,Up有分.
- 图片保存
- 世纪飞扬图形(仪表)组件包 V3.1
- !!我想做一个通用的查询,请问如何解决?!!(分只有这么多了,系统不让多给)
- 请教关于Image图形处理的问题----在线盼复!!
- win98下操作powerpoint的问题。
到这下
http://www.indyproject.org/download/Files/Indy9.html
用ClientSocket如何实现???哪位大拿知道的请指点一二。
看了资料,说是要在OnConnect事件中起线程,这样做的话,是不是每个ClientSocket只能起一个线程呢?
如果在阻塞模式,可以在线程里动态创建这个CLIENTSOCKET.
这种做法比较适用于客户-->服务,单向一问一答..另外,有一个高效使用TClientSocket的技巧.
使用EVENT SELECT I/O方式,
TSocketConnection是用它实现的,
源码里面可以看TTransportThread.Execute的实现,(sconnect单元)
看不懂没关系,呵呵.
我现在是在线程里动态创建clientsocket(ctBlocking模式)的,用TWinSocketStream.Create(clientsoket.Socket,200)设置超时200ms,但是在目标机器关机的情况下,实际上在执行clientsoket.Active := True进行连接的时候,却要等10秒左右才会报10060(由于连接方在一段时间后没有正确的答复或连接的主机没有反应,连接尝试失败)的错误。
另外还有个问题,当我的这个线程在运行的时候,程序主界面无法响应任何操作,这个好像很不正常,线程在运行的时候不是应该不会影响主进程的吗,您估计一般是程序上的哪些错误导致这种不正常现象的呢。
要花较大时间才返回失败,这不是CLIENTSOCKET这组件特有的。
一般阻塞方式SOCKET程序都是这样。。
在多数情况下,这并不是什么问题。先放一边吧。。一旦建立好连接后,TWinSocketStream控制的是发送和接收超时。。-------------------------------
呵呵。就因为你用了Synchronize
Synchronize这东西,你想想同步的含义就有明白的。
当你在工作线程中用Synchronize执行一段代码时,主线程就停下来
让工作线程执行完这段代码。
尽可能少用Synchronize,要用它,也要让它执行的时间尽可能短,
否则,多线程处理事实上成了单线程处理。。甚至更糟。
那如果使用CriticalSection或是信号量的方法是否也同Synchronize是一样的效果呢?
如果我将memtable中的数据暂存到一个主线程不会访问的文件中,工作线程通过访问这个文件来获得数据,处理完毕后再对memtable进行更新,是不是就能解决我的问题了呢?