qt共享内存 怼烎@ 2022-10-22 15:54 218阅读 0赞 # [qt 共享内存(QSharedMemory)][qt _QSharedMemory] # ——————————————————写入部分—————————————————— (本次程序基于控制台程序) 首先 使用共享内存得召唤一下: \#include <QSharedMemory> 然后 声明QSharedMemory类。并且命名为smem QSharedMemory smem; 由于共享内存没有访问密钥,则不能找到共享的内存。我们给他设置一下访问密钥 QString key,sharedstring; 设置访问密钥 qDebug() << "Please input the shared memory key:"; cin >> key; 然后 声明缓冲区和数据流。缓冲区用于转换和保存数据(使用之前要引用这两个库) QBuffer buffer; //缓冲区 QDataStream qdsm(&buffer); //数据流 判断输入访问密钥之后,是否附加到共享内存。如果是,则分离 if(smem.isAttached()) smem.detach(); //判断是否已经连接到共享内存块 如果是的话 就先分离 让用户输入共享的数据 qDebug() << "Please input the string to share:"; cin >> sharedstring; 以可读可写的方式打开缓冲区 buffer.open(QBuffer::ReadWrite); //设置读取模式 把共享的字符串输入到数据流 qdsm << sharedstring; //输入共享字符串到数据流 输入到数据流之后 会影响到缓冲区。缓冲区就会得到数据的大小 int size = buffer.size(); //获得字节大小 让共享内存创建一段内存空间,空间大小为缓冲区数据大小。并且检测是否创建成功 if(!smem.create(size)) //检测共享内存段是否创建成功 \{ qDebug() << "Could not create sharing memory"; return a.exec(); \} 如果创建成功后。为了让程序做读写操作,不让其他的程序影响。我们就先锁上共享内存 smem.lock(); //锁定共享内存 我们先分别获取创建后共享内存的数据的指针和要共享的字符串的数据的指针 char \* to = (char \*)smem.data(); //共享内存的数据 const char \* from = buffer.data().data(); //被共享内存的数据 利用内存拷贝函数(memcpy),把要共享的数据拷贝到共享数据的空间里。拷贝的数据大小是两者中小的那位。哪位小就是要共享的数据的大小(没有证实) memcpy(to,from,qMin(smem.size(),size)); //把要共享的内存拷贝到被共享的内存 解锁共享内存空间。使其能够被其他程序访问 smem.unlock(); //把共享内存解锁 ![278489165532156653377a6f022272cc.png][] ——————————————————读取部分—————————————————— 照样不误的引用上一部分的头文件…… 照常不忘的声明共享内存 QSharedMemory sharemem; 声明共享内存的密钥和读出来的字符串 QString key,readstring; 声明缓冲区 QBuffer buffer; 声明数据流 QDataStream out(&buffer); 让用户输入共享内存的密钥 qDebug() << "Please input the shared memory key:"; cin >> key; 设置共享内存的访问密钥。使其能够找到指定共享内存 sharemem.setKey(key); 找到指定的共享内存后关联此内存 (此处可以理解为:去某人的家要东西) sharemem.attach(); 锁上共享内存。(此处可以理解为:关上门,不允许其他人进来) sharemem.lock(); 用缓冲区得到共享内存关联后得到的数据和数据大小 buffer.setData((char \*)sharemem.constData(),sharemem.size()); 打开缓冲区进行访问 buffer.open(QBuffer::ReadOnly); 使用数据流从缓冲区获得共享内存的数据,然后输出到字符串中 out >> readstring; 解锁共享内存空间 (此处可以理解为:开门,允许其他人进来) sharemem.unlock(); 与共享内存空间分离 (此处可以理解为:我走了,我从家里出去了) sharemem.detach(); ![c78564b1e860d08f90ab85b351ee04c5.png][] [qt _QSharedMemory]: https://www.cnblogs.com/lvdongjie/p/4995211.html [278489165532156653377a6f022272cc.png]: /images/20221022/267ab29aa0804a708e28223c40b82909.png [c78564b1e860d08f90ab85b351ee04c5.png]: /images/20221022/8cb06e237ccc4405a9a6084688c5dbc9.png
相关 Qt多进程共享内存 Qt提供了一种安全的共享内存的实现QSharedMemory,以便在多线程和多进程编程中安全的使用。 先说下实现共享内存的步骤,然后用一具体的实例说明。 (一)向 r囧r小猫/ 2022年12月15日 11:16/ 0 赞/ 294 阅读
相关 qt共享内存 [qt 共享内存(QSharedMemory)][qt _QSharedMemory] ——————————————————写入部分———————————————— 怼烎@/ 2022年10月22日 15:54/ 0 赞/ 219 阅读
相关 共享内存 1.共享内存 a.操作步骤 (1)创建共享内存 (2)映射共享内存 (3)分离共享内存 (4)控制、删除共享内存 b.相关函数 1.shmget 作用:在 男娘i/ 2022年07月15日 13:23/ 0 赞/ 194 阅读
相关 共享内存 共享内存 是被多个进程共享的一部分物理内存,共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以理科看到其 小灰灰/ 2022年07月15日 01:38/ 0 赞/ 253 阅读
相关 共享内存 共享内存 是被多个进程共享的一部分物理内存,共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以理科看到其 淡淡的烟草味﹌/ 2022年07月15日 01:38/ 0 赞/ 232 阅读
相关 Linux--共享内存 include "apue.h" main(){ int id; //创建共享内存 id=shmget(IPC_PRIV 冷不防/ 2022年07月14日 07:51/ 0 赞/ 231 阅读
相关 共享内存 之前我们已经了解了管道和消息队列:[http://blog.csdn.net/qq\_34021920/article/details/79596262][http_blog. 蔚落/ 2022年06月14日 03:52/ 0 赞/ 251 阅读
相关 linux 共享内存 共享内存允许两个或多个进程进程共享同一块内存(这块内存会映射到各个进程自己独立的地址空间)从而使得这些进程可以相互通信。在GNU/Linux中所有的进程都有 唯一的虚 电玩女神/ 2022年03月20日 08:56/ 0 赞/ 306 阅读
相关 共享内存 共享内存头文件为shm.h 共享内存可以视为进程间通信速度最快的方式 共享内存实现函数非常简单, shmctl shmget shmat shmdt 这四个函数是共... 我就是我/ 2021年05月17日 14:09/ 0 赞/ 501 阅读
还没有评论,来说两句吧...