Socket上接收到的数据用一线程来处理,下面的方法错在哪里?急! ( 积分: 42 )

  • 主题发起人 主题发起人 wishme3
  • 开始时间 开始时间
W

wishme3

Unregistered / Unconfirmed
GUEST, unregistred user!
//下面创建一个简单的线程类
type
TInitThread = class(TThread)
private
procedure ProData;
protected
procedure Execute; override;
end;

Procedure TForm1.RecvData()//接收socket上收到的数据
var
NewThread:TInitThread;
begin
//Socket接收到的数据放入一数组中
//然后启动一线程来处理该数组数据
NewThread:=TInitThread.Create(false);
//这里每次收到数据都创建一个线程,在哪里销毁?不消毁资源会耗尽
end;


procedure TInitThread.Execute;
begin
FreeOnTermiNate:=True;
Synchronize(ProData);
end;
//重载Execute方法

procedure TInitThread.ProData;
begin
Screen.Cursor:=crHourGlass;
DealData; //处理数组上的数据
Screen.Cursor:=crDefault;
end;
 
//下面创建一个简单的线程类
type
TInitThread = class(TThread)
private
procedure ProData;
protected
procedure Execute; override;
end;

Procedure TForm1.RecvData()//接收socket上收到的数据
var
NewThread:TInitThread;
begin
//Socket接收到的数据放入一数组中
//然后启动一线程来处理该数组数据
NewThread:=TInitThread.Create(false);
//这里每次收到数据都创建一个线程,在哪里销毁?不消毁资源会耗尽
end;


procedure TInitThread.Execute;
begin
FreeOnTermiNate:=True;
Synchronize(ProData);
end;
//重载Execute方法

procedure TInitThread.ProData;
begin
Screen.Cursor:=crHourGlass;
DealData; //处理数组上的数据
Screen.Cursor:=crDefault;
end;
 
????????没人会?
 
Screen.Cursor在此好似是乱用,资源会耗尽可能因为DealData处理有问题,不退出,在死循环
 
从程序看,你的数组应该是全局的,多个线程处理同一块资源,需要防止对资源的同强,导致逻辑上的处理错误
 
1.使用临界区保护那个数组,防止i/o冲突
2.不要用你那种方法来处理数据,系统负载是有限的,最好使用一个线程池,有数据来的时候就从池里激活一个线程来处理,处理完再放回池中,这样比较节省资源(创建和销毁线程很费资源的)
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部