TClientSocket, TServerSocket非阻塞接收后的处理问题

tsp3ng 2007-04-26 03:40:03
procedure TMsgClientMainFrm.SocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
posindex: integer;
strrec, s: string;
begin

strrec := Socket.ReceiveText;
FReceiveBuf := FReceiveBuf + strRec;
posindex := Pos(strXML_PackEofTag, strrec); //接收到结束标志 </messagebody>
if posindex > 0 then //说明整包接收完成
begin
s := FReceiveNextBuf + FReceiveBuf;
FReceiveNextBuf := Copy(strrec, posindex + Length(strXML_PackEofTag) + 1,
Length(strrec) - (posindex + Length(strXML_PackEofTag)));
FReceiveBuf := '';
s := trimleft(s);
DispatchMessage(s); //接收到消息,统一由此程序负责解析执行,该函数没有使用线程,函数中有用到单元全局变量, 我想应该会出问题的,系统能不能确保必须执行完这个函数再调用这个函数?不停地读取消息,不停地调用这个函数,全局变量肯定会出问题,请问改成线程来处理可以避免这个问题吧。由于个人初学,对线程没有接触,假如线程中用到全局变量能避免不冲突吗? 望各位赐教,谢谢!
end;
end;
...全文
374 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bukkake 2007-07-13
  • 打赏
  • 举报
回复
很强啊
2004v2004 2007-07-13
  • 打赏
  • 举报
回复
我帮你顶下,顺便问下你是怎么解决的,我想看的是你的具体代码 接收和 线程处理部分 能告诉下不。谢谢了
tsp3ng 2007-04-26
  • 打赏
  • 举报
回复
没有回复,如何结贴给分。
tsp3ng 2007-04-26
  • 打赏
  • 举报
回复
本人想到一个办法,设定一个消息缓冲列表,启动一个线程来监视它,
一条一条地取出消息执行,这样应该能避免冲突了。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧