📄 abstuser.pas
字号:
unit abstuser;
interface
uses Classes, WinSock;
type TUser = class(TThread)
private
{ Private-Deklarationen }
Data:string;
protected
procedure Execute; override;
procedure IncommingData(st:string); virtual; abstract;
public
IP:TInAddr;
Socket:TSocket;
procedure Close;
procedure Send(st:string);
constructor Create;
end;
implementation
{ Wichtig: Methoden und Eigenschaften eines Objekts in der VCL
k鰊nen nur in einem Methodenaufruf mit SYNCHRONIZE
genutzt werden, z.B.
Synchronize(UpdateCaption);
und UpdateCaption k鰊nte sein,
procedure TUser.UpdateCaption;
begin
Form1.Caption := 'Updated in einem Thread';
end; }
{ TUser }
uses Windows,misc;
constructor TUser.Create;
begin
inherited Create(true);
Data:='';
FreeOnTerminate:=true;
end;
procedure TUser.Close;
begin
Terminate;
CloseSock(Socket);
end;
procedure TUser.Execute;
var st:string;res,i:Integer;
begin
{ Plazieren Sie den Thread code hier }
repeat
SetLength(st,1000);
res:=recv(Socket,st[1],1000,0);
if res>0 then
begin
SetLength(st,res);
Data:=Data+st;
res:=Pos(#31,Data);
while res>0 do
begin
st:=Copy(Data,1,res-1);
Delete(Data,1,res);
EnterCriticalSection(synchronizer);
IncommingData(st);
LeaveCriticalSection(synchronizer);
res:=Pos(#31,Data);
end;
end else Close;
until Terminated;
end;
procedure TUser.Send(st:string);
begin
st:=st+#31;
WinSock.send(Socket,st[1],Length(st),0);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -