标题:共享内存大小的问题
作者:foxgod
日期:2019-05-29 18:00
内容:
问题1:sharememory->create( Size ) 不管这个size为大小,qDebug()create( Size )这个函数呢?子进程就不需要?
问题3:主进程这样创建,if (sharememory->isAttached())//检测程序当前是否关联共享内存,避免上次未正确关闭时,共享内存未关闭。
{
sharememory->detach();// 将该进程与共享内存段分离
}
if (!sharememory->create( SizeCount ) )
{
qDebug()error();
}那么子进程是否还需要
if (sharememory->isAttached())//检测程序当前是否关联共享内存,避免上次未正确关闭时,共享内存未关闭。
{
sharememory->detach();// 将该进程与共享内存段分离
}问题4:是否可以在主进程里面设置多个共享内存。调用detach()后,是不是这个共享内存就释放了,在使用的时候需要再次create大小呢???这个内存的地址被释放了,还是内存里面的内容被释放了?
#1 [angelus 05-30 11:25]
共享内存的出现是为了跨进程通讯的,如果你是在一个进程里,不需要共享内存。
直接用全局变量就行了,全局变量在多线程里依然可以访问
#2 回 angelus 的帖子 [foxgod 05-30 11:35]
angelus:共享内存的出现是为了跨进程通讯的,如果你是在一个进程里,不需要共享内存。
直接用全局变量就行了,全局变量在多线程里依然可以访问
(2019-05-30 11:25)
我这个是两个进程间获取数据,所以需要共享内存,就是我设置的大小最后比实际的大,有点奇怪
#3 [fsu0413 05-30 12:27]
1 Qt有说明,返回的size可能大于设置的size,里面需要存一些Qt自己的东西
2 只有一个进程调用create,其他进程调用attach
3 主进程子进程都不用检测,如果共享内存没有正确关闭的话:
Windows下:无需任何处理,共享内存会被系统关闭
Linux下:无法进行任何处理,共享内存一定会崩溃
4 只有最后一个实例调用detach或者析构后才会释放
#4 回 fsu0413 的帖子 [foxgod 05-30 12:34]
fsu0413:1 Qt有说明,返回的size可能大于设置的size,里面需要存一些Qt自己的东西
2 只有一个进程调用create,其他进程调用attach
3 主进程子进程都不用检测,如果共享内存没有正确关闭的话:
Windows下:无需任何处理,共享内存会被系统关闭
Linux下:无法进行任 .. (2019-05-30 12:27)
如果这个size比我创建的大,我往里面存的数据,在取出来的时候,不是比我存的字节多,就出错了,这个子进程不知道该取多大的字节,就去了共享内存那么大的字节,所以不是存入的数据那么大的,怎么弄呢?
只有最后一个实例调用detach或者析构后才会释放,你说的这个是并发的时候吧,那如果我两个进程一前以后,中间相隔了10s,那么我第一个实例detach后,第二个实例是否还可以正确取里面的数据呢?
#5 回 foxgod 的帖子 [fsu0413 05-30 12:39]
foxgod:如果这个size比我创建的大,我往里面存的数据,在取出来的时候,不是比我存的字节多,就出错了,这个子进程不知道该取多大的字节,就去了共享内存那么大的字节,所以不是存入的数据那么大的,怎么弄呢?
只有最后一个实例调用detach或者析构后才会释放,你说的这个是并发的时候 .. (2019-05-30 12:34)
1 在通信协议里定
2 detach了之后共享内存没了,数据也丢了