qt QSharedMemory 用法

原创 2015年11月20日 13:23:03
在linux 下使用Qt 的QSharedMemory, 碰到了不能创建共享内存的问题。
sharemem.create 返回false.
经仔细研究,发现在linux 下, sharemem create 失败并不代表错误,
它可能已经被创建了,所以不能再创建同名共享内存了。
linux 共享内存,创建者进程退出时并不会释放共享内存,所以上述问题极易发生。
而windows 在创建者进程退出时,会释放共享内存,这是它们的区别。
想一想,似乎都有道理。windows 粗暴一些,但用法简单。
linux 考虑周到一些,共享内存可以脱离创建者进程独立存在,但用法就复杂一些。

linux 下, 有程序ipcs, ipcrm 来管理,观察共享内存。

把玩如下简单代码: 配合ipcs -m, ipcs -m -p, ipcrm -m 即可理解共享内存了。
#include <QApplication>
#include <QSharedMemory>
#include <stdio.h>

const char *source="only for test";
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSharedMemory sharedmem("hjjdebug");
    if(sharedmem.attach())
    {
        if(!sharedmem.detach())
        {
            printf("can't detach from process\n");
        }
    }
    if (sharedmem.create(1024)) {
        qDebug("shared memory created.");
        sharedmem.lock();
        char * to = static_cast<char*>(sharedmem.data());
        const char * from = source;
        ::memcpy(to, from, strlen(source));
        sharedmem.unlock();
    } else if (sharedmem.attach()) {
        qDebug("shared memory attached.");
        sharedmem.lock();
        const char * data = static_cast<const char*>(sharedmem.constData());
        printf("%s\n",data);
        sharedmem.unlock();
    }
    else {
        qDebug("error.");
    }

    return a.exec();
}                                                                                                                    


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Qt学习—qt共享内存的使用

Qt提供了QSharedMemory类来访问共享内存,实现共享内存的操作。 一、QSharedMemory类常用的操作 1、QSharedMemory类对象的创建 利用QSharedMemo...
  • GDUTLYP
  • GDUTLYP
  • 2016年01月06日 14:27
  • 3951

QSharedMemory

QSharedMemory 首先是setKey(),这是标记共享内存的一个标识符, 在整个操作系统的共享内存中,用这个key去标识它,唯一标识。 attach()函数,在workstation...

QShareMemory 使用

Qt提供了一种安全的共享内存的实现QSharedMemory,以便在多线程和多进程编程中安全的使用。比如说QQ的聊天的客户端,这里有个个性头象,当点击QQ音乐播放器的时候,启动QQ音乐播放器(启动一Q...

QSharedMemory 共享内存 进程间通信

QT间进程通信之共享内存   Qt提供了一种安全的共享内存的实现QSharedMemory,以便在多线程和多进程编程中安全的使用。比如说QQ的聊天的客户端,这里有个个性头象,当点击QQ音乐播放器的时候...

QSharedMemory类

翻译。原文:http://doc.qt.io/qt-5.6/qsharedmemory.html

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

QT 进程间通信之古老的方法(内存共享)

Qt提供了一种安全的共享内存的实现QSharedMemory,以便在多线程和多进程编程中安全的使用。比如说QQ的聊天的客户端,这里有个个性头象,当点击QQ音乐播放器的时候,启动QQ音乐播放器(启动一Q...

QShareMemory 学习

转自:http://hi.baidu.com/cyclone/blog/item/3ebca9ec06b81a2863d09f7a.html 目的:配合windows核心编程第17章(内...
  • fjb2080
  • fjb2080
  • 2011年11月28日 17:24
  • 5197

Qt之进程间通信(共享内存)

简述上一节中,我们分享下如何利用Windows消息机制来进行不同进程间的通信。但是有很多局限性,比如:不能跨平台,而且必须两个进程同时存在才可以,要么进程A发了消息谁接收呢?下面我们来分享另外一种跨平...

Qt运行一个实例进程-3种方式简介

一:使用QLocalSocket    方式:首先一个新的实例启动时,将尝试连接到同一个本地服务器,如果连接失败,则表示第一个实例进程,创建一个本地服务器。否则,进行退出。(.pro里加上QT += ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:qt QSharedMemory 用法
举报原因:
原因补充:

(最多只允许输入30个字)