没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
delphi中用全局结构体做队列(Indy网络控件收发)默认分类 2008-04-18 20:41:38 阅读292 评论0 字号:大中小 订阅
在Delphi网络编程中,经常会用到队列Queue,delphi里面也包含了一些控件,像Tqueue这样的队列控件,以前我也用过Thashedlist做过队列,发现不好用,操作过于复杂。
在实际应用中发现,使用全局结构体,占用非常少的内存,速度奇快,灵活简便。
先在Type中定义两个结构体
type
Cmd_Struct=record //这个是命令结构体,用来存放自己定义的其它结构体数据。
pID: integer; //这个ID号,非常重要。
CmdBuf:Array [0..511] of Byte; //这里最多只能放512个字节,根据实际情况,自己搞掂了
CmdLen:integer;
RemoteHost:string;
RemotePort:integer;
end;
Send_Queue=record
CmdArr: Array [1..1024] of Cmd_Struct; //这里准备了1024个“座位”给上面的命令结构体
Pos: integer; //指针位置
Num: integer; //数量
end;
var全局变量
SendingQueue:Send_Queue; //发送队列
PacketID,CurrID: integer; //全局发送数据包编号,正在发送的包ID
再来几个全局函数(参数中有var的是引用变参,如果缺少会不可引用):
在Delphi网络编程中,经常会用到队列Queue,delphi里面也包含了一些控件,像Tqueue这样的队列控件,以前我也用过Thashedlist做过队列,发现不好用,操作过于复杂。
在实际应用中发现,使用全局结构体,占用非常少的内存,速度奇快,灵活简便。
先在Type中定义两个结构体
type
Cmd_Struct=record //这个是命令结构体,用来存放自己定义的其它结构体数据。
pID: integer; //这个ID号,非常重要。
CmdBuf:Array [0..511] of Byte; //这里最多只能放512个字节,根据实际情况,自己搞掂了
CmdLen:integer;
RemoteHost:string;
RemotePort:integer;
end;
Send_Queue=record
CmdArr: Array [1..1024] of Cmd_Struct; //这里准备了1024个“座位”给上面的命令结构体
Pos: integer; //指针位置
Num: integer; //数量
end;
var全局变量
SendingQueue:Send_Queue; //发送队列
PacketID,CurrID: integer; //全局发送数据包编号,正在发送的包ID
再来几个全局函数(参数中有var的是引用变参,如果缺少会不可引用):
procedure InitQueue(var Queue: Send_Queue); //初始化
function InQueue(var Queue: Send_Queue; var Cmd: Cmd_Struct) : Boolean;
function OutQueue(var Queue: Send_Queue; var Cmd: Cmd_Struct) : Boolean;
以下是函数原型:
//----------------------------------------------------------------------------
procedure InitQueue(var Queue: Send_Queue); //初始化队列
begin
Queue.Num:=0;
Queue.Pos:=1;
end;
//----------------------------------------------------------------------------
function InQueue(var Queue: Send_Queue; var Cmd: Cmd_Struct) : Boolean; //入队
begin
if Queue.Num<1024 then
begin
Queue.Num:=Queue.Num+1;
Queue.CmdArr[Queue.Num]:=Cmd;
Result:=true;
end
else
begin
Result:=false;
Exit;
end;
end;
//----------------------------------------------------------------------------
function OutQueue(var Queue: Send_Queue; var Cmd: Cmd_Struct) : Boolean; //出队
function InQueue(var Queue: Send_Queue; var Cmd: Cmd_Struct) : Boolean;
function OutQueue(var Queue: Send_Queue; var Cmd: Cmd_Struct) : Boolean;
以下是函数原型:
//----------------------------------------------------------------------------
procedure InitQueue(var Queue: Send_Queue); //初始化队列
begin
Queue.Num:=0;
Queue.Pos:=1;
end;
//----------------------------------------------------------------------------
function InQueue(var Queue: Send_Queue; var Cmd: Cmd_Struct) : Boolean; //入队
begin
if Queue.Num<1024 then
begin
Queue.Num:=Queue.Num+1;
Queue.CmdArr[Queue.Num]:=Cmd;
Result:=true;
end
else
begin
Result:=false;
Exit;
end;
end;
//----------------------------------------------------------------------------
function OutQueue(var Queue: Send_Queue; var Cmd: Cmd_Struct) : Boolean; //出队
剩余6页未读,继续阅读
资源评论
- bossenJ2014-05-12代码很ok,谢谢分享
- bbc95272013-06-12代码还可以,注释不够。资源还不错
darkhorse_guo
- 粉丝: 5
- 资源: 49
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功