当前位置: 首页> 汽车> 维修 > 青柠影院免费观看高清电视剧_鄂州网站设计制作公司_短期职业技能培训班_重庆seo整站优化外包服务

青柠影院免费观看高清电视剧_鄂州网站设计制作公司_短期职业技能培训班_重庆seo整站优化外包服务

时间:2025/9/8 7:29:04来源:https://blog.csdn.net/weixin_44629261/article/details/144816139 浏览次数: 0次
青柠影院免费观看高清电视剧_鄂州网站设计制作公司_短期职业技能培训班_重庆seo整站优化外包服务

1、QSharedMemory对象的创建:
(0)、 创建QSharedMemory实例对象,必须为该共享内存指定关键字,即一个名字,只有设置了关键字后,才可以执行创建create()、关联attach()等操作。

(1)、 通过构造函数QSharedMemory(const QString & key, QObject * parent = nullptr)
a、key为关键字,即为共享内存起一个名字。(我觉得此key是对应于Windows API中文件映射内核对象的名字)
b、举例:

QSharedMemory * sm = new QSharedMemory("QSharedMemoryExample");

(2)、 通过构造函数QSharedMemory(QObject * parent = nullptr)创建实例对象后,调用setKey()为该实例对象设置关键字。
a、举例:

QSharedMemory * sm = new QSharedMemory();
sm->setKey("QSharedMemoryExmple");

(3)、 QSharedMemory对象析构,会自动将进程与共享内存分离出来。

2、创建共享内存:
(0)、 bool create(int size, QSharedMemory::AccessMode mode = ReadWrite)
a、使用Key创建size大小的共享内存,并且将共享内存附加到进程上。
b、size指定共享内存的空间大小。
c、mode为访问共享内存的方式,默认是可读可写。QSharedMemory定义了两种访问方式:
-> QSharedMemory::ReadOnly 只读方式
-> QSharedMemory::ReadWrite 读写方式
d、成功返回true。失败返回false, 原因:Key标识的共享内存已经存在,此时不会执行附加操作, QSharedMemory::AlreadyExists; 没有足够的内存给开辟, QSharedMemory::OutOfResources。

(1)、 举例:

sm->create(100);

(2)、 (我觉得此步骤相当于Windows API中的CreateFileMapping)

3、关联共享内存:
(0)、 bool attach(QSharedMemory::AccessMode mode = ReadWrite)
a、尝试将进程附加到由Key标识的共享内存。
b、共享内存默认的访问方式为可读可写。
c、成功返回true。失败返回false,原因:没有找到Key标识的共享内存。

(1)、 举例:

sm->attach();

(2)、 (我觉得此步骤相当于Windows API中的MapViewOfFile)

4、分离共享内存:
(0)、 bool detach()
a、解除共享内存与进程的关联。
b、如果该共享内存被多个进程所关联,当最后一个进程和共享内存解除关联后,该共享内存将由操作系统自动释放掉。
c、分离成功返回true。分离失败返回false,原因: 该进程本身与共享内存就没有关联; 该共享内存被另一个进程锁定。
d、作为创建者,应该确定别人也不用共享内存了再解绑。

(1)、 举例:

sm->detach();

(2)、 (我觉得此步骤相当于Windows API中的UnmapOfView和CloseHandle)

5、判断共享内存的关联状态:
(0)、 bool isAttached() const
a、该函数用来判断进程是否和共享内存进行关联。
b、关联返回true。否则返回false。

(1)、 举例:bool b = sm->isAttached();

6、锁定共享内存:
(0)、 bool lock()
a、如果共享内存资源当前处于释放状态,进程调用该函数将共享内存中的资源锁定,并返回true。其它进程将不能访问该共享内存。
b、如果共享内存被其它进程占用时,则进程调用该函数会一直处于阻塞状态,直到其它进程使用完毕,释放共享内存资源。
(1)、 举例:

sm->lock();

7、解锁共享内存:
(0)、 bool unlock()
a、如果共享内存资源被当前进程所占有,调用该函数将解锁共享资源,并返回true。
b、如果当前进程没有占用该资源,或者共享内存被其它进程访问,则不做任何操作返回false。

(1)、 举例:

sm->unlock();

(2)、 为了保证共享内存中数据的完整性,当一个进程在读写共享内存的时候,其它进程不允许对该共享内存进行访问。
例如某一进程对共享内存进行读写操作之前,调用lock()锁定该共享内存,之后独享共享内存中的数据,访问共享内存完毕后,调用unlock()函数释放共享内存的使用权限。

8、获取共享内存的地址:
(0) 、
const void * constData() const;
void * data();
const void * data() const;

(1)、 进程关联共享内存的前提下,调用该函数返回共享内存中数据的起始地址。如果没有关联共享内存,则返回0。

9、获取共享内存的大小:
(0)、 int size() const

(1)、 调用该函数将返回进程所关联的共享内存的大小(字节)。如果没有关联的共享内存,则返回0。

关键字:青柠影院免费观看高清电视剧_鄂州网站设计制作公司_短期职业技能培训班_重庆seo整站优化外包服务

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: