[发明专利]进程间的通信方法和通信系统有效
申请号: | 201110403299.1 | 申请日: | 2011-12-07 |
公开(公告)号: | CN103150220A | 公开(公告)日: | 2013-06-12 |
发明(设计)人: | 游晶 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54;G06F12/02 |
代理公司: | 北京德琦知识产权代理有限公司 11018 | 代理人: | 张晓峰;宋志强 |
地址: | 518044 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 进程 通信 方法 系统 | ||
1.一种进程间的通信方法,该方法在进程间使用共享内存队列收发数据,其特征在于,包括:
在所述共享内存中标记读写地址,包括预读头地址PrepareHead、已读头地址ActualHead、预写尾地址PrepareTail和已写尾地址ActualTail;
发送进程在发送数据时,根据当前的读写地址和欲发数据包长度判断所述共享内存是否有可写入该数据包的空间,当判定有可写入该数据包的空间时在共享内存中以所述PrepareTail为开头写入数据包,并根据所发送数据包的长度更新所述PrepareTail,当写入完毕后将该数据包的写入地址放入发送进程的句柄池;发送线程依次读取该句柄池中的写入地址,每读一个写入地址则根据该写入地址对应的数据包长度更新所述ActualTail,并通知接收进程接收数据;
接收进程收到接收数据的通知后,根据所述PrepareHead和ActualTail判断所述共享内存是否有数据包可读,当判定有数据包可读时将所述PrepareHead放入接收进程的句柄池中,并根据该PrepareHead开始的数据包长度更新该PrepareHead;接收进程依次读取该句柄池中的PrepareHead,并从共享内存的该PrepareHead处开始读取数据包,每读取完毕一个数据包则根据该已读数据包长度更新所述ActualHead。
2.根据权利要求1所述的方法,其特征在于,所述根据当前的读写地址和欲发数据包长度判断所述共享内存是否有可写入该数据包的空间的具体方法为:
判断PrepareTail加上当前数据包的长度totallength是否小于ActualHead,如果是则所述共享内存有可写入该数据包的空间,否则没有可写入该数据包的空间。
3.根据权利要求1所述的方法,其特征在于,所述根据所述PrepareHead和ActualTail判断所述共享内存是否有数据包可读的具体方式为:
判断所述PrepareHead和ActualTail是否相等,如果是则判定没有数据包可读,否则判定有数据包可读。
4.根据权利要求1所述的方法,其特征在于,所述根据所发送数据包的长度更新所述PrepareTail的具体方式为:将PrepareTail值增加所发送数据包的长度;
所述根据所述写入地址对应的数据包长度更新所述ActualTail的具体方式为:将ActualTail的值增加所写入地址对应的数据包的长度;
所述根据所述PrepareHead开始的数据包长度更新该PrepareHead的具体方式为:将PrepareHead的值增加该PrepareHead开始的数据包的长度;
所述根据已读数据包长度更新所述ActualHead的具体方式为:将ActualHead的值增加该已读数据包的长度。
5.根据权利要求1所述的方法,其特征在于,所述共享内存的队列为循环队列,且在所述共享内存中标记折返地址;并在发送进程判断所述共享内存是否有可写入欲发送数据包的空间之前进一步包括:
判断ActualHead是否小于等于PrepareTail,并且PrepareTail加上当前欲发送数据包的长度是否大于所授予折返地址,如果是,则需要折返,否则,不需要折返;
在需要折返时,通过判断共享内存队列的头地址加上欲发送数据包的长度是否小于ActualHead来判断共享内存是否有可写入欲发送数据包的空间,如果是则判定有可写入欲发送数据包的空间,否则没有可写入该数据包的空间;在判定有可写入欲发送数据包的空间后、更新所述PrepareTail之前,进一步包括将所述折返地址更新为当前PrepareTail,之后再更新所述PrepareTail,具体的更新方式为:将该PrepareTail更新为共享内存队列的头地址加上欲发送数据包的长度;并且以共享内存队列的头地址为开头写入欲发送的数据包;
在分别更新所述ActualTail、PrepareHead、以及ActualHead之后进一步分别包括:判断更新后的值是否等于所述折返地址,如果是则将更新后的值重置为所述共享内存的头地址。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110403299.1/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种发动机加机油口盖安装工装
- 下一篇:一种活塞环梯面磨床工件盘快速安装夹具