日期:2014-05-16  浏览次数:20741 次

使用SYSTEM V队列,有关消息资源释放的问题
使用SYSTEM   V消息队列中,为避免资源释放,是否每个消息的构造需要全局的吗?资源是否会自动释放?

例如   :
V_SendMsg()
{
        MSG_T   stSndMsg;     /*   需要准备发送的消息   */
        初始化stSndMsg;
        发送stSndMsg;
        msgsnd(...stSndMsg....);

}

V_RcvMsg()
{
        MSG_T   *pstRcvMsg;           /*   准备要接收消息的指针   */
        msgrcv(...pstRcvMsg.....);
       
}

问题:

V_SendMsg()将消息发送到队列中,是否将要发送的消息的一份拷贝发送至队列中呢?还是就将那一段内存直接发送至队列中?

V_RcvMsg()接收消息后,是否会自动释放资源?还是由我们自己主动释放呢?

------解决方案--------------------
V_SendMsg()将消息发送到队列中,是否将要发送的消息的一份拷贝发送至队列中呢?还是就将那一段内存直接发送至队列中?
===
拷贝

V_RcvMsg()接收消息后,是否会自动释放资源?还是由我们自己主动释放呢?
===
自己申请的内存当然要自己释放,如果消息长度不是太大,建议用结构代替指针
V_RcvMsg()
{
MSG_T stRcvMsg; /* 准备要接收消息的结构 */
msgrcv(...stRcvMsg.....);

}
这样可以减少指针出错的概率。
当然,如果消息还需要尽一步的处理,指针是较好的选择,但是要坚持谁申请,谁释放的原则。

------解决方案--------------------
队列中资源的由系统处理, 队列外的动态资源你自己处理.