当前位置: 首页 > article >正文

Qt仿音乐播放器:客户端唯一化

一、铺垫

1.我们采用共享内存来进行客户端的唯一化;

2.我刚看到的时候,就感觉,这是人想出来的吗?太绝了

二、实例

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

    QSharedMemory shareMemory("Widget");
    //当程序第一次运行时,由于共享内存的空间还没有被创建,此处的attach一定会失败
    //当程序第二次运行时,由于共享内存的空间已经被前一次的运行申请好,此时第二个实例再去关联就能成功
    //由于只能运行一个实例,让第二个实例直接退出就行
    if(shareMemory.attach()){
       shareMemory.decath();
       QMessageBox ::information(nullptr,"MiniMusic提示","程序已经在运行……");
       return 0;
    }
    shareMemory.create(1);//在物理空间申请1个字节;

    Widget w;
    w.show();
    return a.exec();
}

正常情况下应该先创建共享内存空间,再进行连接;我第一次运行程序先连接,连接不成功,创建共享内存;后进行以下程序代码;

第二次运行程序时会根据给的Key值{QSharedMemory shareMemory("Widget");Widget就是Key值},连接共享空间,若连接上;就证明启动了第二个程序 ,立刻结束程序;

QSharedMemory类,此类会在不同的运行环境下,有不同的表现;只说Windows环境下,只有此变量被销毁,或自动结束连接,才会结束连接;所以在if语句中,不结束连接也是可以的;但是,我更希望写全;


http://www.kler.cn/a/471276.html

相关文章:

  • WebSocket底层原理及 java 应用
  • Kafka优势剖析-高效的数据复制
  • CDP集成Hudi实战-spark shell
  • 面试高阶问题:对称加密与非对称加密的原理及其应用场景
  • 什么样的人适合从事FPGA开发的工作?
  • qml PathView详解
  • 使用 httputils + chronicle-bytes 实现金融级 java rpc
  • 【免费】2004-2019年各省规模以上工业企业RD经费面板数据
  • RabbitMQ-死信队列
  • android系统的一键编译与非一键编译 拆包 刷机方法
  • 【数据可视化】数据可视化看板需求梳理模板(含示例)
  • Linux 系统清理命令大全
  • 深度学习中的正则化方法
  • React 深入学习理解
  • Redis Zset有序集合
  • python学opencv|读取图像(二十七)使用cv2.warpAffine()函数平移图像
  • Unity中 Xlua使用整理(一)
  • nginx 配置 本地启动
  • 移动应用安全基础:深入理解Hooking框架
  • cuda实现flash_attn_mma_share_kv源码分析
  • vue el table 不出滚动条样式显示 is_scrolling-none,如何修改?
  • Airflow:SQL Sensor 监控数据库业务变化
  • 力扣--283.移动零
  • presto权限管理
  • 计算机网络之---无线网络的传输介质
  • 使用 Flink CDC 构建 Streaming ETL