读书人

急网络数据通讯有关问题(多线程怎么解

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

急急急!!!网络数据通讯问题(多线程如何解决???)
网络服务端不断发送数据,客户端接收到数据并实时刷新画面,如果数据量大时,写在TClientSocketr的OnRead事件中出现停滞或死机现象,请问如何用多线程处理该问题?多谢各位大虾!

[解决办法]
使用API创建多线程来运行你的OnRead事件。

先定义全局变量
MyThread: Integer; //WINAPI建立线程后返回变量
MyThreadID: dword; //WINAPI建立线程时ID
将OnRead事件原代码写到一个自定义的procedure,例如名字为AA
将OnRead事件新代码写如下
MyThread:=CreateThread(nil,0,@TForm1.AA,nil,0,MyThreadID);//建立个线程来运行
注意:在AA的procedure最后一条语句加入,也就是在最后一个end;之前加入
TerminateThread(MyThread,0); //结束线程
[解决办法]
自己用winsock API来做,注意和VCL界面的同步。
[解决办法]
用 ClientSocket 的阻塞模式, 才用多线程 ,
[解决办法]
hzlf的方法不错

先定义全局变量
MyThread: Integer; //WINAPI建立线程后返回变量
MyThreadID:Array of dword; //WINAPI建立线程时ID ***用数组吧,不然怎么调度
将OnRead事件原代码写到一个自定义的procedure,例如名字为AA
将OnRead事件新代码写如下
MyThread:=CreateThread(nil,0,@TForm1.AA,nil,0,MyThreadID);//建立个线程来运行
注意:在AA的procedure最后一条语句加入,也就是在最后一个end;之前加入
TerminateThread(MyThread,0); //结束线程

这里的全局变量用数组来保存线程id,比较好调度一些

读书人网 >.NET

热点推荐