W
wishme
Unregistered / Unconfirmed
GUEST, unregistred user!
Socket接收到数据后,要对数据进行处理,如下我的流程是否有问题?
///流程:
public
recvarray:TstringList;//用来把收到的数据先添加到这个数组上,然后创建线程来处理数组
type
TInitThread = class(TThread)
private
procedure ProData; //数据处理
protected
procedure Execute; override;//重载
public
constructor Create();//构造函数
end;
//上面定义线程
constructor TInitThread.Create;
begin
inherited Create(false);
FreeOnTerminate:=true;
end;
procedure TInitThread.Execute;
begin
Synchronize(ProData);
end;
//上面是继承了Execute方法
procedure TInitThread.ProData;
begin
//这里处理数组recvarray上的数据
end;
//从socket接收数据,并处理之
procedure TForm1.RecvData;
var
s_recv:string;
begin
s_recv:=Socket1.recvdata;
if s_recv<>'' then //收到我的数据
begin
recvarray.add(s_recv);//加到公共数组上
NewThread:=TInitThread.Create(false);//创建线程来处理
end;
end;
//上面每收到一次数据就create一次线程,没有问题吧
//如果数组上有数据没处理完,但socket上如果很长时间没有数据过来,就不会再执行create的那行代码,也就不可能再有机会处理数组上的数据,数组上剩余的数据将一直留到socket又有数据进来才会被处理,这也是个问题,难道要用定时器不成?那就没意义了吧
//能否只用一个线程专门来处理,而不要每次收到数据都create一个线程,该怎么改?
///流程:
public
recvarray:TstringList;//用来把收到的数据先添加到这个数组上,然后创建线程来处理数组
type
TInitThread = class(TThread)
private
procedure ProData; //数据处理
protected
procedure Execute; override;//重载
public
constructor Create();//构造函数
end;
//上面定义线程
constructor TInitThread.Create;
begin
inherited Create(false);
FreeOnTerminate:=true;
end;
procedure TInitThread.Execute;
begin
Synchronize(ProData);
end;
//上面是继承了Execute方法
procedure TInitThread.ProData;
begin
//这里处理数组recvarray上的数据
end;
//从socket接收数据,并处理之
procedure TForm1.RecvData;
var
s_recv:string;
begin
s_recv:=Socket1.recvdata;
if s_recv<>'' then //收到我的数据
begin
recvarray.add(s_recv);//加到公共数组上
NewThread:=TInitThread.Create(false);//创建线程来处理
end;
end;
//上面每收到一次数据就create一次线程,没有问题吧
//如果数组上有数据没处理完,但socket上如果很长时间没有数据过来,就不会再执行create的那行代码,也就不可能再有机会处理数组上的数据,数组上剩余的数据将一直留到socket又有数据进来才会被处理,这也是个问题,难道要用定时器不成?那就没意义了吧
//能否只用一个线程专门来处理,而不要每次收到数据都create一个线程,该怎么改?