Qt共享内存实现进程间消息队列

news/2025/3/20 2:55:37/

在Qt 5.9中,可以使用Qt的跨进程通信机制来实现进程间的消息队列。这个机制是通过Qt的QSharedMemory、QSystemSemaphore和QSharedMemory类来实现的。

首先,你需要创建一个消息队列的服务器端和客户端。服务器端负责接收和处理消息,客户端负责发送消息。

服务器端的代码示例如下:

```cpp
#include <QCoreApplication>
#include <QSharedMemory>
#include <QSystemSemaphore>
#include <QDataStream>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建共享内存和信号量
    QSharedMemory sharedMemory("my_shared_memory");
    QSystemSemaphore semaphore("my_system_semaphore", 1, QSystemSemaphore::Create);

    // 连接到共享内存
    if (!sharedMemory.attach()) {
        qDebug() << "Server: Creating shared memory";
        sharedMemory.create(sizeof(qint32));
    }

    // 获取共享内存指针
    sharedMemory.lock();
    qint32 *data = static_cast<qint32*>(sharedMemory.data());
    sharedMemory.unlock();

    // 接收消息
    while (true) {
        semaphore.acquire();
        sharedMemory.lock();
        QDataStream stream(sharedMemory.data(), QIODevice::ReadWrite);
        qint32 message;
        stream >> message;
        sharedMemory.unlock();
        semaphore.release();

        qDebug() << "Server: Received message" << message;
    }

    return a.exec();
}
```

客户端的代码示例如下:

```cpp
#include <QCoreApplication>
#include <QSharedMemory>
#include <QSystemSemaphore>
#include <QDataStream>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 连接到共享内存和信号量
    QSharedMemory sharedMemory("my_shared_memory");
    QSystemSemaphore semaphore("my_system_semaphore", 1);

    // 发送消息
    for (int i = 0; i < 10; ++i) {
        semaphore.acquire();
        sharedMemory.lock();
        QDataStream stream(sharedMemory.data(), QIODevice::ReadWrite);
        stream << i;
        sharedMemory.unlock();
        semaphore.release();

        qDebug() << "Client: Sent message" << i;
    }

    return a.exec();
}
```

这样,服务器端就可以接收到客户端发送的消息,并进行处理。注意,服务器端和客户端都需要连接到相同的共享内存和信号量。

请注意,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。另外,Qt还提供了其他跨进程通信的机制,如QtDBus和QtRemoteObjects,你也可以根据实际情况选择使用。


http://www.ppmy.cn/news/486540.html

相关文章

动态规划_可视化校园导航Floyd算法应用

目录 引言 图片展示 视频展示 针对校园导航问题的分析 关键技术和算法介绍 详细介绍&#xff1a;算法的实现 总结 代码 附件&#xff1a;Map.png 引言 本文主要通过详细的程序打印和作者的推理过程&#xff0c;描述作者对Floyd算法的理解&#xff0c;阐述其中的动态规划思想是如…

[转]Web 前端中的增强现实(AR)开发技术

本文转自https://geekplux.com/2018/01/18/augmented-reality-development-tech-in-web-frontend.html 作者 GeekPlux --------------------------------------------------------------------------------------------------------------------------------- 本文力求把目前前…

专访Gowild邱楠:典型AI时代的非典型AI创业公司

今天我们所处的时代&#xff0c;是典型的AI时代。深度学习算法的发展、芯片产业带来的算力增长和移动设备带来的数据量暴增&#xff0c;都给今天的AI发展提供了足够强大的基石。加上国家政策的支持&#xff0c;更给了当下AI创业企业非同一般的光环。 对于科大讯飞、Face这类研发…

调研报告——光电信息处理

光电信息处理是基于对函数的数学描述与建模&#xff0c;运用光学元器件完成光学信息的模拟分析和处理&#xff0c;或在计算机中完成对信息的各种数字处理和分析。通过光电信息处理&#xff0c;可以大大提高数据处理和存储的能力。 光电信息处理的方向较多&#xff0c;我今后主…

[转]Web 前端中的增强现实(AR)开发技术 – Min220的博客 – CSDN博客

文章目录 [隐藏] [转]Web 前端中的增强现实&#xff08;AR&#xff09;开发技术 [转]Web 前端中的增强现实&#xff08;AR&#xff09;开发技术 2018年05月26日 15:39:32 Min220 阅读数&#xff1a;1295 本文转自https://geekplux.com/2018/01/18/augmented-reality-developmen…

Web 前端中的增强现实(AR)开发技术

Web 前端中的增强现实&#xff08;AR&#xff09;开发技术 本文转自https://geekplux.com/2018/01/18/augmented-reality-development-tech-in-web-frontend.html 本文力求把目前前端方向的 AR 技术都罗列一遍&#xff0c;细节不赘述&#xff08;保证文章篇幅不过长&#xff…

如何“复活”一个人,这里有一份最全的技术路线图谱丨钛媒体深度

关注ITValue&#xff0c;看企业级最新鲜、最具价值报道&#xff01; 大开眼界&#xff0c;为了数字化永生&#xff0c;人类也是拼了。 美国民权运动领袖马丁路德金第六次登上了《时代》杂志封面&#xff0c;2020年2月刊。 此前他曾先后五次登上封面&#xff0c;分别在1957年、1…

云、AI、5G技术驱动时代,文娱产业如何实现云上突围?

2020年伊始&#xff0c;新型冠状病毒疫情在催生“宅经济”蓬勃发展的同时&#xff0c;也带来了移动互联网文娱消费的新趋势。根据QuestMobile数据&#xff0c;春节后移动互联网单日人均使用时长增至7.3小时&#xff0c;其中&#xff0c;视频、短视频、游戏等文娱类APP使用时长飙…