Z
zhaoxueli
Unregistered / Unconfirmed
GUEST, unregistred user!
从socket上不停接收数据然后创建线程来处理,做法如下
type //先声明TThread类
TInitThread = class(TThread)
protected
procedure Execute; override;
public
constructor Create;
end;
var
NewThread: TInitThread; //声明线程对象
implementation
constructor TInitThread.Create;
begin
inherited Create(FALSE); //Createsuspended = false
FreeOnTermiNate := True;
end;
procedure TInitThread.Execute; //重载execute
begin
Synchronize(DealData);
end;
procedure DealData();
begin
//处理数据,这里有查数据库,并需要较长时间
end;
Procedure TForm1.SocketRecv(); //在这里接收socket的数据
begin
GLogCS.Enter; //这是线程同步:GLogCS: TCriticalSection;
signlist.Add(recvstr);//把收到的数据先添加到一个list数组上
GLogCS.Leave;
NewThread := TInitThread.Create; //创建新线程
end;
我的问题是:
1、我的这种做发有问题吗?
2、在接收数据时,数据量很大,不停有数据进来,那我就不停的:
NewThread := TInitThread.Create;
这样总好象处理不过来,因为数据量小我发现程序没问题,量一大就不对劲了,form
反应变得很慢,而且form都拖不动了,程序变的很慢
type //先声明TThread类
TInitThread = class(TThread)
protected
procedure Execute; override;
public
constructor Create;
end;
var
NewThread: TInitThread; //声明线程对象
implementation
constructor TInitThread.Create;
begin
inherited Create(FALSE); //Createsuspended = false
FreeOnTermiNate := True;
end;
procedure TInitThread.Execute; //重载execute
begin
Synchronize(DealData);
end;
procedure DealData();
begin
//处理数据,这里有查数据库,并需要较长时间
end;
Procedure TForm1.SocketRecv(); //在这里接收socket的数据
begin
GLogCS.Enter; //这是线程同步:GLogCS: TCriticalSection;
signlist.Add(recvstr);//把收到的数据先添加到一个list数组上
GLogCS.Leave;
NewThread := TInitThread.Create; //创建新线程
end;
我的问题是:
1、我的这种做发有问题吗?
2、在接收数据时,数据量很大,不停有数据进来,那我就不停的:
NewThread := TInitThread.Create;
这样总好象处理不过来,因为数据量小我发现程序没问题,量一大就不对劲了,form
反应变得很慢,而且form都拖不动了,程序变的很慢