关于delphi7如何解决idtcpserver 的CurrentReadBuffer的阻塞问题

guhenjing guhenjing 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如题,在indy 编程中,我需要用服务端接收多个客户端的信息,并根据客户端信息返回不同的结果
with AThread.Connection do
begin
try
//EnterCriticalSection(CS);
Tmpstr:=CurrentReadBuffer;
AThread.Synchronize(Addtmpstr);
if iRet >= 0 then
begin
Writeln(inttostr(iRet));
end
else
begin
writeln('匹配失败或非法数据');
end;
// LeaveCriticalSection(CS);
tmpstr,iret为全局变量,iret在addtmpstr中被赋值(与tmpstr值有关),如果不设临界区的话就会出现多个线程之间相互干扰的现象(不如客户端1收到的是本应该是2的值),如果设临界区的话(把//打开),如果其中一个客户端只建立连接而不发送数据的话,线程就会阻塞在Tmpstr:=CurrentReadBuffer;这里,临界区无法释放,其他客户端就无法与服务器交流。
...全文
评论 1
收藏 已收藏
分享
返回顶部