Qt提供了一种安全的共享内存的实现QSharedMemory,以便在多线程和多进程编程中安全的使用。

先说下实现共享内存的步骤,然后用一具体的实例说明。

(一)向共享内存中提供数据的一方:

1,定义QSharedMemory shareMemory,并设置标志名shareMemory.setKey(),例如shareMemory.setKey("shareimg");

2,将共享内存与主进程分离 shareMemory.detach();

3,创建共享内存 shareMemory.create();

4,将共享内存上锁shareMemory.lock();

5,将进程中要共享的数据拷贝到共享内存中;

6,将共享内存解锁shareMemory.unlock();

(二)从共享内存中取数据的一方:

1,定义QSharedMemory shareMemory,并设置共享内存的标志名shareMemory.setKey()注意设置的要与提供内存共享的一方要一样,本例是shareMemory.setKey("shareimg")。

2,将共享内存上锁shareMemory.lock();

3,将共享内存与主进程绑定shareMemory.attach(),使该进程可以访问共享内存的数据;

4,从共享内存中取数据;

5,使用完后将共享内存解锁shareMemory.unlock(),最后将共享内存与该进程分离shareMemory.detach();

如程序运行图:

ef2bbf1df249d287645dd99b90994ebc.png

上面的程序(称为A)将图片从文件中读取并显示,同时将读取的图片数据复制到共享内存。下面的程序(称为B)直接从共享内存中获取A读取的图片数据并显示出来。

源代码下载:

------------------------------------------分割线------------------------------------------

具体下载目录在 /2016年资料/1月/8日/Qt共享内存实现进程间通信(QSharedMemory)/

------------------------------------------分割线------------------------------------------

0b1331709591d260c1c78e86d0c51c18.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐