idtcpserver,多客户端同步问题(200分)

  • 主题发起人 主题发起人 Afei1
  • 开始时间 开始时间
A

Afei1

Unregistered / Unconfirmed
GUEST, unregistred user!
//在tcpserver里面,根据客户端的请求,需要处理两个事情。
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
//临界区进入
try
if 加密 then
加密解密函数 //需要readstream和writestream,很快,数据不会超过3M
else
更新函数 //同步两个服务器的数据,可能要花几分钟到几个小时
finally
//临界区离开
end;
end;

现在的问题是如果不加入临界区,多个客户端同时连接的时候,加密解密的时候会出错。如果加入临界区则如果一个客户先要求更新数据,另一个客户后要求解密,那要等数据更新完之后才进行解密,要等很久,这显然是不行的。
现在想做成这样,弄两个队列或者说是线程,分别处理两个事情,一个是加密的,一个是更新的,就是加密的和更新数据能同步执行,如果同是加密的或同是更新的必须顺序执行,现在一直想不出要如何做,请各位高手支招。
 
应该说创建个线程就可以解决,但要在哪里创建?
 
既然是现成,只需等待即可.
Var
JMBusy : Boolean = False;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
//临界区进入
try
if 加密 then
begin
While JMBusy Do
Sleep(1);
JMBusy:=True;
try
加密解密函数 //需要readstream和writestream,很快,数据不会超过3M
finally
JMBusy:=False;
end;
end else
Begin
While JMBusy Do
Sleep(1);
更新函数 //同步两个服务器的数据,可能要花几分钟到几个小时
End;
finally
//临界区离开
end;
end;
呵呵!
 
楼上的,我不明白你的意思啊?
这样子不是一样的吗
到更新函数还是有可能要等个几分钟甚至几个小时
 
这样的话临界区是不是应该去掉?
这两天比较忙,晚上我试试看
 
把更新函数放入一个单独的线程中来运行吧
 
用wql的方法已经初步达到我的要求了,谢谢参加的两位
 
后退
顶部