SystemV 消息队列设置不能msqid_ds 和 msginfo 同时设置。

本文详细介绍了如何正确设置消息队列的整体大小,并指出通过tmsgbuf.msg_qbytes设置整体大小的方法才是合理的。同时强调了不能直接设置单条消息大小,需要通过命令行或配置文件来实现。

如下为使用两个结构进行设置 消息队列


struct msqid_ds tmsgbuf;

tmsgbuf.msg_qbytes = m_nMsgMaxSize;



    struct msginfo tmsginfo;
tmsginfo.msgmax = m_nMsgMaxSize;
tmsginfo.msgmnb = m_nMsgMaxSize;


if(msgctl(m_nMsgID, IPC_SET, &tmsgbuf) == -1)

{
perror("err:set ipcmsgbuf  fail!");
return -1;
}
if(msgctl(m_nMsgID, IPC_SET, (struct msqid_ds*)&tmsginfo) == -1)
{
perror("err:set ipcmsginfo  fail!");
return -1;

}


如果msqid_ds设置了,再设置 tmsginfo,会对先前设置的msqid_ds有影响

而且根据设置前后消息队列的大小和单条消息大小 限制 值 的打印,发现 只能通过 msg_qbytes  来设置消息队列整体大小,设置单条大小 msgmax  和 通过msgmnb 设置整体大小,都是不合理的。


总结,

1. 如果要设置消息整体大小,就是用 tmsgbuf.msg_qbytes ,通过msgctl(m_nMsgID, IPC_SET, &tmsgbuf) 设置,不要使用tmsginfo.msgmnb 

2.程序中,只能设置消息整体大小,不能设置单条大小,要设置大条大小需通过 命令行或修改配置文件

3.不要将 msgctl(m_nMsgID, IPC_SET, &tmsgbuf)  和msgctl(m_nMsgID, IPC_SET, (struct msqid_ds*)&tmsginfo) 混用

MsgInfo V1.00(一)、说明一个用来察看当前进程中消息的控件,D6环境编译。(二)、属性1、ShowType: MSGHex: 是否显示消息ID(16进制) MSGDec: 是否显示消息ID(10进制) MSGStr: 是否显示消息ID(字符串) MsgClassName:是否显示窗体类名 MsgHwnd: 是否显示窗体句柄 MsgWParam: 是否显示消息WParam值 MsgLParam: 是否显示消息LParam值2、DefineClassName: 允许(禁止)显示消息的窗体类名,如TForm13、DefineMsg: 允许(禁止)显示的消息ID,如$0005、wm_paint4、DefineState: EnableMsg: DefineMsg不为空串时,False禁止显示加入DefineMsg的消息,True只显示加入DefineMsg的消息 EnableClassName: DefinClassName不为空串时,False禁止显示加入DefineClassName的消息,True只显示加入DefineMsg的消息 EnableHwnd: 设置了AddDefineHwnd后,False禁止显示ADDDefineHwnd加入的窗体句柄消息,True则只显示加入的窗体句柄消息 EnableClassNameEnableHwnd设置不一致时,以EnableClassName为准5、DisableFrequent:是否过滤掉WM_NCHITTEST、WM_SETCURSOR、WM_ENTERIDLE、WM_NOTIFY出现频繁的消息6、HookType: 设置钩子类型7、Activate: 是否激活钩子(三)、方法1、AddDefineHwnd(): 加入的句柄为允许(禁止)显示消息的窗体句柄(可加入多个)2、Clear: 清空消息信息(四)、事件HookMethod: 可以在此事件中自行处理钩子,钩子返回值Result默认为0 注意在处理CBT钩子的HCBT_CreateWnd时,设计期拖放到窗体的控件还未创建,使用这些控件的属性方法会出现异常。 (五)、文件MsgInfo.txt是参考文件,必须放入执行程序当前目录。此文件可自定义或扩充,无需排序格式:第一行表示消息ID的十六进制字符串,如$0005,必须$开头 第二行表示消息ID的字符串常量,如WM_Size 第三行表示该消息的说明(可省略)MsgResult.txt显示结果(六)、制作双元软件工作室http://shuangyuan.wx-e.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值