Linux中利用消息队列给两个程序切换显示到前台

Linux安装消息队列IBM MQ 7.5开发版安装配置详解 消息队列IBM MQ 7.5开发版安装配置详解 文章目录消息队列IBM MQ 7.5开发版安装配置详解前言一、什么是IBM MQ?二、安装前准备1、安装前准备2、安装MQ Server3、启动实例4、创建队列一个名为TEXT的队列(测试)5、启动端口监听6、启动成功总结 前言 IBM 已经熟练地优化了 MQ(消息队列),在市场上已有超过 25 年的历史。借助 MQ(消息队列),如果无法立即传递消息,那么会在其等待队列中确保消息安全,直到保证传递为止。竞争产品可能会传递两次消息或根本不传递消息,而 M 阅读详情

消息队列–两个进程间的通信

需求:

  • 1.在Linux系统中
  • 2.两个ui界面的程序切换,一个显示,另一个隐藏

.h

#ifndef PROGRAMWINDOWSWITCH2_H
#define PROGRAMWINDOWSWITCH2_H

#include <QObject>
#include <QThread>
#include <QMainWindow>

struct Message{
    long msgType;
    int msgText[2];
};

class MessageQueueReceiver : public QThread
{
    Q_OBJECT
public:
    MessageQueueReceiver(int msgid,QObject *parent = nullptr,int type = 1):QThread(parent),msgid(msgid),curWindowType(type){}

signals:
    void messageReceived(const int &message);

protected:
    void run() override;

private:
    int msgid;
    int curWindowType;
};

class programwindowswitch2 : public QObject
{
    Q_OBJECT
public:
    enum WindowType{
        ConfigWindow = 1,
        ControlWindow = 2
    };
    explicit programwindowswitch2(QObject *parent = nullptr,WindowType type = ConfigWindow);

signals:
    void showWindowSignal(void);
    void ChangedWindow(void);
public slots:
    void vSwitchOtherWindow(bool flag= true);

private slots:
    void handleMessage(const int &message);

private:
    int msgid;
    MessageQueueReceiver *m_receiver;

    QWidget *pMainWidget;
    WindowType curWindowType;
};

#endif // PROGRAMWINDOWSWITCH2_H

.cpp

#include "programwindowswitch2.h"
#include <QMutex>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <iostream>

#include <QDebug>

programwindowswitch2::programwindowswitch2(QObject *parent,WindowType type) : QObject(parent),curWindowType(type)
{
    pMainWidget = static_cast<QMainWindow*>(parent);

    key_t key = ftok("myMessage",35);
    msgid = msgget(key,0666 | IPC_CREAT);

    m_receiver = new MessageQueueReceiver(msgid,this,curWindowType);
    connect(m_receiver,&MessageQueueReceiver::messageReceived,this,&programwindowswitch2::handleMessage);
    m_receiver->start();
}

void MessageQueueReceiver::run()
{
    Message msg;
    while (true) {
        if(msgrcv(msgid,&msg,sizeof(msg),curWindowType,0) > 0){
            emit messageReceived(msg.msgText[0]);
        }
    }
}

void programwindowswitch2::vSwitchOtherWindow(bool flag)
{
    Message msg;

    if(pMainWidget == nullptr)
        return;

    switch (curWindowType) {
    case ConfigWindow:
        msg.msgType = 2;
        msg.msgText[0] = flag;
        break;
    case ControlWindow:
        msg.msgType = 1;
        msg.msgText[0] = flag;
        break;
    default:
        return;
        break;
    }

    msgsnd(msgid,&msg,sizeof(msg),0);
}

//show windows
void programwindowswitch2::handleMessage(const int &message)
{
    bool show_flag = false;

    if(pMainWidget == nullptr)
        return;

    switch (curWindowType) {
    case ConfigWindow:
        if(message == 1){
            show_flag = true;
        }
        break;
    case ControlWindow:
        if(message == 1){
            show_flag = true;
        }
        break;
    default:
        break;
    }
    if(show_flag){
        emit ChangedWindow();
        pMainWidget->show();
        vSwitchOtherWindow(false);
    }
    else {
        pMainWidget->hide();
    }
}
应用程序构建消息队列2 人到中年,是一个转折点,以后的路要思考清楚。见多了文人莫名奇怪的相轻。感谢某个业界大神鼓励说30岁是一个程序员的巅峰时刻。 本文实现的消息队列,是用list.h实现的。适用于以下场景:线程之间异步性比较明显(执行需要时间,需要事件回调)的情况,消息类型比较多的情况。 这篇文章的内容是博主为一个windows服务器写的消息队列,等下去书香门第上河坊散步,就之间粘贴了,不再修改为linu,如有需要可自行编辑一把(工作量倒不是很大,顺便加深理解,哈哈)。 说来也奇怪,在2年前博主还大骂windows烂,骂gol 阅读详情

相关推荐

Palantir Vertex:数字孪生模拟与决策系统深度指南

Palantir Vertex是Foundry系统中的核心数字孪生模块,本质上是一个决策模拟器而非简单的数据可视化工具。它基于本体层构建,通过对象关系网络模拟现实世界实体,填补数据模型与业务决策间的鸿沟。核心功能包括:创建隔离的沙盒场景进行假设测试、修改参数模拟不同干预方案、对比虚实数据发现异常,并最终将最优决策回传至业务系统。典型应用场景涵盖供应链韧性评估、资产维护优化和应急方案制定等,帮助用户在复杂环境中做出更优决策。

轩哥的个人研究和成长记录 891

linux qt实现窗口跳转_QT 主窗口和子窗口相互切换示例

#include "mainwidget.h"MainWidget::MainWidget(QWidget*parent): QWidget(parent){ui.setupUi(this);this->setParent(parent);this->setWindowTitle(QString::fromLocal8Bit("老大"));this->resize(QSize(5...

weixin_35765225的博客 623

高云FPGA开发实战:手把手教你用ModelSim做功能仿真与时序分析(附Testbench写法)

本文详细介绍了高云FPGA开发中如何使用ModelSim进行功能仿真与时序分析,包括环境搭建、Testbench编写、波形调试和时序优化等实战技巧。通过具体案例和代码示例,帮助开发者掌握FPGA仿真验证的核心方法,提升设计可靠性。特别针对高云GW5A系列器件提供了专业的仿真库配置指南和时序分析策略。

weixin_30412167的博客 465

Linux课程设计:Linux系统下多进程的创建与通信

Linux课程设计:Linux系统下多进程的创建与通信

KI的博客 6447

scratch航天梦主题课程作品分享,包含ppt、素材包

而今年多国都将发射探测器尝试登陆月球,2023年或将称为“登月年”,请大家发挥创新思维,以“星辰大海”为创作主题,搜集相关信息 、展开联想,为实现升空 、探测 、取样贡献创意!即使去淘宝买的素材,也要从百度网盘,但素材太多大了或者太多文件,也要充值百度网盘超级会员才能保存,提高下载速度。同学们大家好,今天我们就要开始航天主题-嫦娥五号探月工程系列的编程课程了,不仅可以学习到很多航天知识,了解本次嫦娥五号的发射历程,还能让我们用编程遨游太空呢。即使下载了,也要上传,不是特别方便,尤其是不好查找。

少儿编程吕口口 2481

别再只看成交量了!用通达信这个VOL监测公式,一眼识别主力吸筹与出货信号

本文详细介绍了通达信VOL监测公式的实战应用,通过彩色量柱和换手率分层技术,帮助投资者识别主力吸筹与出货信号。该公式结合动态量能标准化和多周期均线组合,提供可视化主力行为图谱,提升交易决策的准确性。

weixin_28693447的博客 657

linux 消息队列

Init1msgget2msgsnd2Schedule()3总结17前面都是一些实现细节,看看总结就可以了Init在前面文档中说的查找 ipc_namespace 是通过当前进程的task_stuct 检索到的这个结构体定义在 ipc/util.c 中 struct ipc_namespace init_ipc_ns 不管是共享内存 还是消息队列,都是把自己的ids 放到ipc_namespace 中的结构体指针数组ids 中去。Ipc/msg.c void __init msg_init(void)__m

853

拆解汽车T-Box:从4G模块到MCU,手把手教你理解车联网的‘黑匣子’

本文深入拆解汽车T-Box,揭示其作为车联网‘黑匣子’的核心架构与工作原理。从4G模块、MCU主控到外设接口,详细解析各组件功能及协同机制,并通过实战案例展示故障诊断与性能优化技巧,帮助读者全面理解T-Box在智能汽车中的关键作用。

weixin_30955617的博客 492

Linux学习记录--消息队列

本文介绍了Linux系统中的POSIX消息队列(Message Queue)机制及其核心API。消息队列是一种支持优先级、异步通信的IPC方式,相比管道等传统方法具有结构化消息、内核持久化等优势。文章详细对比了不同IPC机制的特性,重点讲解了mq_open、mq_send等核心函数的使用要点,包括参数设置、错误处理和注意事项。通过实际代码示例演示了消息队列的创建、读写操作和优先级特性,并展示了跨进程通信的实现方法。最后指出当前示例仅为基础用法,后续可进一步优化性能。文章为开发者提供了POSIX消息队列的实用

hhhwx666的博客 1139

Xilinx的DDR4 IP

Xilinx的DDR4 IP

weixin_39896700的博客 4456

深度学习中的注意力机制

最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一。本文以机器翻译为例,深入浅出地介绍了深度学习中注意力机制的原理及关键计算机制,同时也抽象出其本质思想,并介绍了注意力模型在图像及语音等领域的典型应用场景。

优快云人工智能 4万+

linux应用 进程间通信之消息队列(System V)

本文阐述了进程间通信之消息队列(System V)的定义,列举了编程中使用的接口和linux命令,编写了测试用例测试相关功能

cesheng3410的博客 1481

链接文件及功能安全:Hightec如何将Flash驱动放进RAM

Fls本身是无法操作自身的,犯冲突。Fls_WriteCmdCycles (预留300字节)与 Fls_EraseCmdCycles(预留200字节) 函数在执行之前将会Copy进RAM,Fls本身是不能操作Fls本身的,除非把最底层的驱动函数防止在RAM或者其他的Flash里面,假设Flash放置在PF0可以操作PF1。英飞凌的驱动有个规定写指令预留300字节,擦除指令预留200字节。

梦想技术家 2141

KVM两个世界:硬件切换器与Linux虚拟化详解

KVM是IT领域最常见的同名缩写之一,既指硬件层的KVM切换器(Keyboard Video Mouse),也指Linux内核级虚拟化方案(Kernel-based Virtual Machine)。硬件KVM用于解决多台服务器共用一套键鼠显示器的机房控制问题,涉及正版辨别、登录密码重置、EDID全屏异常等实操细节;Linux KVM则依托内核模块与QEMU/Libvirt生态,实现guest OS的隔离运行,核心包括虚拟CPU、VirtIO半虚拟化设备、UEFI固件配置及内外剪贴板互通。理解两者的技术原理

weixin_34005042的博客 381

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

golang类似linux的消息队列,Golang简单又快速地接入rocketmq实现消息队列业务

在web应用业务中,经常会遇到类似异步处理,秒杀,排队等逻辑,这时利用消息队列来完成这样的功能是一个明智的选择;在业务规模较小的应用中我们可以使用redis中的list数据类型,在大规模业务中我们可以引入rocketmq等,尤其在业务重构时需要将原有的redis消息队列实现改成rocketmq,为了保证既有业务不受影响又不引入新的BUG,是一件非常苦恼的事情;今天就介绍一个包,可以方便的解决上述问...

weixin_39839726的博客 640

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

linux中 和 如何切换,Linux 系统中用户切换

1. Linux系统中用户切换的命令为su,语法为:su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]参数说明-f , –fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。-l , –login:加了这个参数之后,就好像是重新登陆一样,大部分环境变量(例如HOME...

weixin_42516048的博客 411

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MMU作用,linux进程间通信方式 进程切换原因步骤

MMU的两个主要功能是: 1.     将虚地址转换成物理地址。  2.     控制存储器存取允许。MMU关掉时,虚地址直接输出到物理地址总线。 MMU的作用有两个:地址翻译和地址保护 软件的职责是配置页表,硬件的职责是根据页表完成地址翻译和保护工作。 通过MMU的映射,则可实现程序完全运行在SDRAM之中。 通过MMU可实现不连续的物理地址空间映射为连续的虚拟地址空间。 通过MMU

星河_SR的专栏 3265

Linux多进程、线程创建管理及状态切换

在嵌入式Linux中创建四个进程,2个实时进程,2个非实时进程。(2)sched_setscheduler()函数:第一个参数为需要改变调度策略的目标线程,第二个参数为改变的调度策略,第三个参数为一个结构指针类型,用以指定调度优先级。(1)当pid==0时,说明此时代码运行是在子进程中,会退出该子进程,以免子进程继续创建子进程,父进程中的pid则为创建的子进程的pid号。第一个参数指向线程标识符的指针,第二个参数设置线程的属性,第三个参数是线程运行函数的起始地址,第四个参数为运行函数的参数。

ZHUhapi的博客 1475

linux redis 节点主从手动切换

linux,redis相关学习资料:https://edu.51cto.com/video/1400.htmlhttps://edu.51cto.com/video/4196.htmlLinux Redis 节点主从手动切换 在分布式系统中,Redis 作为高性能的键值存储系统,常被用于缓存、消息队列等场景。为了保证系...

weixin_40482810的博客 486

【Linux】消息队列和信号量

有内核维护的一个队列容器,属于 System‑V IPC消息队列是一种由操作系统内核维护的、支持双向通信的队列结构,进程A、进程B不直接互相拷贝数据,A把带类型的数据块(消息节点)丢进内核队列,B从队列读取消息,双向都可以收发消息队列每个数据块(消息)必须包含一个类型字段(type),用于区分消息的发送者或类别,接收方可以根据类型有选择的接收消息。

2501_93806388的博客 235

【Linux取经路】进程通信——消息队列、信号量

本篇文章介绍了两种进程间通信的方式,消息队列和信号量

春人.的博客 1674

Linux系统下多进程的创建与通信

本次实验顺利完成了任务书中的各个要求,并且都得到了正确的结果。本次实验的亮点有:(1)除了任务书要求完成的基本命令转换外,还额外完成了md等七条Windows命令的转换。(2)研究了popen函数的机理,在执行cd命令时使用chdir函数来对前台和后台程序的工作路径进行切换。(3)采用命名管道对前后台程序的通信进行同步。(4)不同输出采用不同颜色,使结果一目了然。不足之处与改进:(1)Linux的终端界面比较简洁,可以考虑实现图形界面。

王二的博客 741

systemV信号量与消息队列

systemV信号量与消息队列

2302_80190394的博客 945

linux posix 消息队列,实现posix消息队列示例分享

//// File.c// UNIX_C//// Created by 周凯 on 14-2-9.// Copyright (c) 2014年 zk. All rights reserved.//#include "mqueue.h"#include #if !defined(_LINUX_)#define va_mode_t int#else#define va_mode_t m...

weixin_39611389的博客 256

某多多面试相关操作系统、分布式事务、消息队列及 Linux 内存回收策略

本文总结了电商平台(如某多多)系统架构中的关键技术问题,包括操作系统、分布式事务、消息队列和Linux内存回收。主要内容包括:线程与进程的区别(资源隔离、创建开销、通信方式)、分段与分页内存管理(灵活性、碎片问题)、用户态与内核态的权限差异;分布式事务中的二阶段提交协议(2PC)设计(准备与提交阶段);消息队列的优势(解耦、异步、削峰、可靠性);以及Linux内存回收策略(虚拟内存、页面回收、内存压缩、OOM机制)。这些知识点对面试和实际工作都具有重要参考价值。

qq_33665793的博客 1544

[linux实验] 进程通信机制(IPC):共享内存、消息队列、信号量集

概述 管道pipe的通信是有操作系统帮助我们管理的,我们只需要创建管道即可,进程之间的互斥和管道的销毁有os自动完成。 而使用ipc机制需要我们手动考虑所有的情况:创建、互斥、销毁操作。 Linux 支持典型的三种进程间通信机制:共享内存 (shared memory segment),消息(message queue),信号量(semaphores set) 。 这三种通信方法虽然操作在不同的数据结构上,但在概念和用法上与共享内存很相 似。它们每一种通信,都要先使用一个调用来创建用于通信的资源; 同样,它

H4ppyD0g的博客 755
上一篇: Qt中的触屏事件
下一篇: Linux中不启动桌面,让界面程序跑的时候跟有界面系统一样
Simple_core
博客等级 码龄6年 929粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值