服务端用TIdTcpServer, 加了IdThreadMgrDefault控件和IdAntiFreeze控件.在win2003的服务器上运行经常CPU接近100%!!
很郁闷,请大师们指点小弟
procedure TfrmMain.ServerTCPExecute(AThread: TIdPeerThread);
var
cmd: byte;
begin
try
if (not AThread.Terminated) and (AThread.Connection.Connected) then
begin
with AThread do
begin
Connection.ReadBuffer(cmd,1); if cmd = 1 then //发送最新公告
begin
Connection.WriteBuffer(PubNote, SizeOf(PubNote));
end
else if cmd = 2 then //设置最新公告 这种情况很少,一般不会执行
begin
Connection.ReadBuffer(tmpPubNote, SizeOf(tmpPubNote));
Synchronize(SetNewPubNote);
cmd := 3;
Connection.WriteBuffer(cmd,1); //设置成功
end;
end;
end;
Sleep(50);
except
// AThread.Connection.DisconnectSocket;
{ on e: Exception do
ShowMessage(e.Message); }
end;
end;procedure TfrmMain.ServerTCPException(AThread: TIdPeerThread;
AException: Exception);
begin
try
AThread.Connection.DisconnectSocket;
except
end;
end;
很郁闷,请大师们指点小弟
procedure TfrmMain.ServerTCPExecute(AThread: TIdPeerThread);
var
cmd: byte;
begin
try
if (not AThread.Terminated) and (AThread.Connection.Connected) then
begin
with AThread do
begin
Connection.ReadBuffer(cmd,1); if cmd = 1 then //发送最新公告
begin
Connection.WriteBuffer(PubNote, SizeOf(PubNote));
end
else if cmd = 2 then //设置最新公告 这种情况很少,一般不会执行
begin
Connection.ReadBuffer(tmpPubNote, SizeOf(tmpPubNote));
Synchronize(SetNewPubNote);
cmd := 3;
Connection.WriteBuffer(cmd,1); //设置成功
end;
end;
end;
Sleep(50);
except
// AThread.Connection.DisconnectSocket;
{ on e: Exception do
ShowMessage(e.Message); }
end;
end;procedure TfrmMain.ServerTCPException(AThread: TIdPeerThread;
AException: Exception);
begin
try
AThread.Connection.DisconnectSocket;
except
end;
end;
连接达到30多个的时候就会CPU100% 等待队列为3. 客户端会频繁的连接和断开,难道是服务端处于等待的连接数太多时就会导致CPU100%吗?
Connection.ReadBuffer(tmpPubNote, SizeOf(tmpPubNote));
这2个Note的空间是多少?
Sleep(1)
TPubNote = record
note :string[255];
pubtime :string[30];
end;
或者sleep(0);
但是这些与你CPU占100%没关系,因为你并没有执行额外的多余的事情,视客户端的状况,你的CPU就是应该这样忙。