社区
网络及通讯开发
帖子详情
怎样使用多线程进行数据的收发?使用TThread对象可以吗?如何实现呢?大家请进。
BoweirrKing
2003-11-30 08:18:47
怎样使用多线程进行数据的收发?我发现发送的数据量一大,程序就没有响应了。所以我想用多线程。请大家帮忙解决一下。
使用TThread对象可以吗?如何实现呢?谢谢你们了。
...全文
49
13
打赏
收藏
怎样使用多线程进行数据的收发?使用TThread对象可以吗?如何实现呢?大家请进。
怎样使用多线程进行数据的收发?我发现发送的数据量一大,程序就没有响应了。所以我想用多线程。请大家帮忙解决一下。 使用TThread对象可以吗?如何实现呢?谢谢你们了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BoweirrKing
2003-12-10
打赏
举报
回复
if(对方接收完毕)break;
那我怎么知道对方接收完毕了呢? 我的思路是另外用一个Client来发送这边已经接收完毕的消息,你看可以吗?
但是在实际编码的时候,那些CS逻辑已经有些混乱了,呵呵....
lbg
2003-12-09
打赏
举报
回复
snedsock->Active=true;
sendsock->Socket->SendBuf(buf,10000);来发送数据,但是,在服务器那边就收不到,表现为无法激活OnClientRead事件(Host以及Port均设置正确),这是怎么回事?
要循环来等的...,如果在Execute()中只有:
snedsock->Active=true;
sendsock->Socket->SendBuf(buf,10000);
这样会导致在数据还没有发送之前就线程结束了,对方肯定不能接收到数据 ,需要加:
while(1)
{
if(对方接收完毕)break;
}
BoweirrKing
2003-12-09
打赏
举报
回复
哦,是这样的啊。我要好好钻研一下啦。谢谢你们啦。
BoweirrKing
2003-12-01
打赏
举报
回复
我自己想了个方法,似乎不行,请大家看看。
我在派生出的TMyThread中添加了一个成员变量 TClientSocket *sendsock;
我在TThread的构造函数中添加了一个参数,是一个 TClientSocket *sock,我想用它来发送数据。在构造函数中,使得 sendsock=sock; 然后在Execute()中使用
snedsock->Active=true;
sendsock->Socket->SendBuf(buf,10000);来发送数据,但是,在服务器那边就收不到,表现为无法激活OnClientRead事件(Host以及Port均设置正确),这是怎么回事?
你们都是怎么实现的?有电子版的教材可以给我看看吗?我想下载看看。
另外,在收数据的时候,也有停止响应的情况出现,不知你们遇到过吗?
其实如果有好书的话,我也不会这么郁闷了。还希望你们多多指教啊。
TangSe
2003-12-01
打赏
举报
回复
同意pp616(游戏全删了) ,用socket api 把bc的ClientSocket 和 ServerSocket丢掉吧。实在太不爽了。
做多线程,服务器,同步处理等非常不爽。肯定要自己写的。
pp616
2003-12-01
打赏
举报
回复
用socket api 把bc的ClientSocket 和 ServerSocket丢掉吧。实在太不爽了。
jhwh
2003-12-01
打赏
举报
回复
你使用线程是阻塞方式,而OnClientRead 是异步方式,当然不能激活。服务器也必须使用阻塞方式连接。
TangSe
2003-12-01
打赏
举报
回复
to BoweirrKing(忽然变傻) :
我觉得好书便是vcl源代码,在bcb\source\vcl下面,写的很清晰,很容易理解。
TangSe
2003-12-01
打赏
举报
回复
怎么发送的数据量大了就没有响应了呢?
跟大小没关系的呀。
发送对于你的程序来说,是不需要时间的,系统直接把你的发送数据拷贝到系统tcp/ip堆栈中,如果非组赛的话,立即返回。当然如果缓冲区满等问题,会返回wsa would block错误,继续发就是了。
sendoskc->active=true;
可能并没有连接上。TClientSocket他的这个连接过程可能是非组赛的,你看看sockcomp.pas。你要在OnConnect事件中判断是否连接上了。我不用这个的,自己用winsock api写的vcl组件,connect是组赛的,直接知道连接上没有,而接受/发送是非组赛的。
/*
我在派生出的TMyThread中添加了一个成员变量 TClientSocket *sendsock;
我在TThread的构造函数中添加了一个参数,是一个 TClientSocket *sock,我想用它来发送数据。在构造函数中,使得 sendsock=sock; 然后在Execute()中使用
snedsock->Active=true;
sendsock->Socket->SendBuf(buf,10000);来发送数据,但是,在服务器那边就收不到,表现为无法激活OnClientRead事件(Host以及Port均设置正确),这是怎么回事?
shadowstar
2003-12-01
打赏
举报
回复
可以!
实现可以参考一下BCB的例子,还是看看书吧。。。
pp616
2003-12-01
打赏
举报
回复
你准备做什么。用什么做。
HenryGo
2003-11-30
打赏
举报
回复
不是很懂
热情up
叶子哟
2003-11-30
打赏
举报
回复
www.ccrun.com
www.chinabcb.com上下个example看看
主要是解决同步的问题
delphi
多线程
读取
数据
本示例中,我们关注的是如何在Delphi环境中
使用
T
Thread
组件
进行
多线程
编程,以便并行读取文本文件
数据
。下面将详细阐述这个主题。 首先,T
Thread
是Delphi提供的一个类,它是Windows API中的线程概念的具体
实现
,...
Delphi中有一个线程类T
Thread
是用来
实现
多线程
编程
在Delphi中,
多线程
编程是通过T
Thread
类
实现
的。T
Thread
是VCL(Visual Component Library)框架的一部分,位于Classes单元中,为开发者提供了一种方便的方式来创建和管理线程。它对Windows API的线程创建和管理
进行
...
在BCB中
使用
多线程
( 转载 )_BladeW的博客-CSDN博客1
尽管可以直接
使用
Windows API,但
使用
T
Thread
类可以简化
多线程
编程,同时仍能利用同步
对象
来避免并发问题。 总的来说,BCB通过T
Thread
类为开发者提供了一种方便的方式来利用
多线程
技术,从而提高程序的响应速度和...
在Delphi中利用
多线程
实现
数据
采集的方法.doc
通过以上分析可以看出,在Delphi中
使用
多线程
技术
进行
数据
采集不仅能够有效提升
数据
处理的效率,还能确保程序的稳定性和响应性。对于涉及大量
数据
处理的应用场景来说,这是一种非常实用且高效的技术方案。开发者可以...
delphi
多线程
读写
数据
在"delphi
多线程
读写
数据
"的场景中,T
Thread
可以用来创建两个独立的线程,分别负责读取文件的两个部分,以
实现
并行读取,从而提升读取速度。 以下是
使用
T
Thread
进行
多线程
读写的步骤: 1. **创建T
Thread
子类**:...
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章