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

做网站什么系统简单产品市场推广途径

做网站什么系统简单,产品市场推广途径,如何搭建一个公司网站,家私家具网上商城1. 什么是 QSharedMemory? QSharedMemory 是 Qt 中用于进程间共享内存的类。它允许多个进程共享一块内存区域,从而避免数据传输时的 IO 操作,提高通信速度。通过共享内存,多个进程可以直接读写这块内存,而无需经过文件…

1. 什么是 QSharedMemory?

QSharedMemory 是 Qt 中用于进程间共享内存的类。它允许多个进程共享一块内存区域,从而避免数据传输时的 IO 操作,提高通信速度。通过共享内存,多个进程可以直接读写这块内存,而无需经过文件或网络传递。

QSharedMemory 的核心特点

  1. 唯一键(Key)标识

    • 每块共享内存通过唯一的键(字符串)标识。

    • 不同进程通过相同的键连接到共享内存。

  2. 线程安全性

    • 提供锁机制(lock() 和 unlock())以保护共享内存的读写。

  3. 跨平台支持

    • Qt 的跨平台特性使 QSharedMemory 可以在不同操作系统上无缝使用。


2. QSharedMemory 的常用场景

  1. 实时数据共享

    • 如传感器数据、实时日志等需要在多个进程间快速传递。

  2. 高性能需求

    • 在频繁更新的大量数据(如图像处理、缓存共享)中,通过共享内存减少通信开销。

  3. 进程间消息传递

    • 两个或多个应用程序之间的简单数据交换。


3. QSharedMemory 的工作流程

共享内存的基本使用可以分为以下几个步骤:

  1. 创建共享内存

    • 第一个进程通过 create(size) 创建一块共享内存。

    • 分配的大小由数据的存储需求决定。

  2. 附加到共享内存

    • 其他进程通过 attach() 方法连接到已有的共享内存。

  3. 数据读写

    • 通过 lock() 和 unlock() 保证线程安全,获取内存指针后读写数据。

  4. 释放共享内存

    • 调用 detach() 断开与共享内存的连接。


4. QSharedMemory 常用函数详解

以下是 QSharedMemory 类的常用函数及其作用:

函数名作用
构造函数

创建 QSharedMemory 对象,指定唯一键标识共享内存。

create(size)

创建指定大小的共享内存,如果共享内存已存在则返回失败。

attach()

附加到已有的共享内存,连接成功后可以访问内存内容。

detach()

断开与共享内存的连接,并释放资源(只有最后一个进程断开时共享内存才会被销毁)。

lock()

锁定共享内存,防止其他进程或线程同时访问数据(用于数据同步)。

unlock()

解锁共享内存,允许其他进程访问数据。

data()

 / constData()

获取共享内存的指针,用于读写数据(data() 为可写指针,constData() 为只读指针)。

isAttached()

检查当前进程是否已经连接到共享内存。

error()

 / errorString()

获取最近一次操作的错误代码和描述,便于调试。


5. 使用示例:QSharedMemory 实现进程间通信

以下是一个完整的例子,展示如何通过 QSharedMemory 实现进程间的读写通信。

程序1:写入共享内存

程序1负责创建共享内存并向其中写入数据。

#include <QCoreApplication>
#include <QSharedMemory>
#include <QDebug>
#include <QTimer>
#include <QDateTime>#define tc(a) QString::fromLocal8Bit(a)int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QSharedMemory sharedMemory("MySharedMemoryKey");// 创建共享内存,大小为 1024 字节if (!sharedMemory.create(1024)) {qDebug() << tc("无法创建共享内存:") << sharedMemory.errorString();return-1;}qDebug() << tc("共享内存已创建");// 定时写入动态数据QTimer timer;QObject::connect(&timer, &QTimer::timeout, [&]() {if (sharedMemory.lock()) {char *to = static_cast<char *>(sharedMemory.data());QString message = tc("程序1动态消息#") + QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");QByteArray byteArray = message.toLocal8Bit();memcpy(to, byteArray.data(), byteArray.size() + 1); // 写入动态数据sharedMemory.unlock();qDebug() << tc("成功写入共享内存:") << message;} else {qDebug() << tc("无法锁定共享内存进行写入:") << sharedMemory.errorString();}});timer.start(1000); // 每秒更新一次return a.exec();
}

程序2:读取共享内存

程序2连接到共享内存,读取数据并解析时间戳。

#include <QCoreApplication>
#include <QSharedMemory>
#include <QDebug>
#include <QTimer>
#include <QDateTime>#define tc(a) QString::fromLocal8Bit(a)int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QSharedMemory sharedMemory("MySharedMemoryKey");// 连接到已有的共享内存if (!sharedMemory.attach()) {qDebug() << tc("无法连接到共享内存:") << sharedMemory.errorString();return-1;}qDebug() << tc("成功连接到共享内存");// 定时读取数据QTimer timer;QObject::connect(&timer, &QTimer::timeout, [&]() {if (sharedMemory.lock()) {constchar *from = static_cast<constchar *>(sharedMemory.constData());QString data = QString::fromLocal8Bit(from);sharedMemory.unlock();// 解析时间戳QString timeStampString = data.split("#").at(1);QDateTime messageTime = QDateTime::fromString(timeStampString, "yyyy-MM-dd hh:mm:ss.zzz");// 当前时间QDateTime currentTime = QDateTime::currentDateTime();qDebug() << tc("从共享内存读取到的数据:") << data;// 如果时间戳解析成功,计算时间差if (messageTime.isValid()) {qint64 timeDifference = messageTime.msecsTo(currentTime); // 时间差(毫秒)qDebug() << tc("接收到的时间:") << messageTime.toString("yyyy-MM-dd hh:mm:ss.zzz");qDebug() << tc("当前时间:") << currentTime.toString("yyyy-MM-dd hh:mm:ss.zzz");qDebug() << tc("时间差(毫秒):") << timeDifference;} else {qDebug() << tc("无法解析时间戳!");}} else {qDebug() << tc("无法锁定共享内存进行读取:") << sharedMemory.errorString();}});timer.start(1000); // 每秒读取一次return a.exec();
}


6. 注意事项

  1. 共享内存大小

    • 创建共享内存时,指定的大小必须足够大以存储所有数据。

  2. 锁机制

    • 在操作共享内存前,必须调用 lock() 进行锁定,以避免数据竞争。

    • 使用完成后,必须调用 unlock() 解锁。

  3. 错误处理

    • 使用 error() 和 errorString() 检查共享内存的状态。

  4. 进程退出

    • 调用 detach() 确保释放共享内存资源。


7. 总结

QSharedMemory 是一种高效的进程间通信方式,适用于需要快速传递数据的场景。通过本文的讲解,您应该能够掌握 QSharedMemory 的核心功能及其应用。无论是共享日志、实时数据,还是跨进程消息传递,QSharedMemory 都是一个值得考虑的解决方案。


文章转载自:

http://7MLWpogM.kfjnx.cn
http://MF9SEklB.kfjnx.cn
http://D8NMsK2e.kfjnx.cn
http://oJZUsB9d.kfjnx.cn
http://4M0Zj5P4.kfjnx.cn
http://ZSjCx4pS.kfjnx.cn
http://Q1a8aewt.kfjnx.cn
http://mPoZasJJ.kfjnx.cn
http://4C0fOKNz.kfjnx.cn
http://6YDPxbmI.kfjnx.cn
http://if7YdcYz.kfjnx.cn
http://Kyiq9ntc.kfjnx.cn
http://QelYihJe.kfjnx.cn
http://3nJdFYs5.kfjnx.cn
http://ODvwRCkn.kfjnx.cn
http://19AutEp1.kfjnx.cn
http://w2wjyDC1.kfjnx.cn
http://oI3JdrAK.kfjnx.cn
http://sJ9I5QBx.kfjnx.cn
http://wgZaeLCF.kfjnx.cn
http://ciTj7vJY.kfjnx.cn
http://vLy3Hmwg.kfjnx.cn
http://tKvrUj2A.kfjnx.cn
http://qbJ1ngZz.kfjnx.cn
http://Vtl0COaM.kfjnx.cn
http://zNmn730M.kfjnx.cn
http://qTDPHOBc.kfjnx.cn
http://OCORNrDb.kfjnx.cn
http://S8b9UTSk.kfjnx.cn
http://ZgTEkNT8.kfjnx.cn
http://www.dtcms.com/wzjs/693221.html

相关文章:

  • 做企业形象网站网站建设运维情况
  • 旅游商城网站建设宝山苏州网站建设
  • 手机网站免费生成app网络营销策略案例分析
  • 旅行社做网站齐家网装修怎么样
  • 做搞机网站做动画合成的视频网站
  • 一个网站的建设需要什么手续推广运营方案
  • 网站开发php有哪些企业信息管理系统有哪些
  • 京东客网站怎么做php做网站难么
  • 从0建设一个网站文字转图片生成器在线
  • 手机商城网站案例动漫网站实现功能
  • 赛车pk10计划网站建设南通网站的优化
  • 长沙哪里可以做网站东莞企业自助建站系统
  • 官方网站怎么注册哪个网站做h5比较好
  • 营销型网站设计建设网站seo方案建议
  • 男女在床上做暖暖插孔视频网站设计师招聘网站有哪些
  • 广州专业网站开发在家做网站
  • 平阳高端网站建设安徽品质网站建设创新
  • 衡水网站建设培训学校建设网站的报价
  • 鱼馆网站的前期策划去掉 wordpress.org
  • 免费个人简历制作网站mm131爬虫wordpress
  • 网络营销的特点及形式天津网站建设seo优化
  • 子域名的网站放到哪里去公司网站备案网址
  • 网站建设与维护相关知识wordpress+免备案空间
  • 建网站用什么工作站网站怎么快速排名
  • 什么是网站维护南宁seo做法价格
  • 做网站的流程与步骤南昌vr网站开发
  • 博物馆设计网站推荐wordpress维护模式
  • 揭阳网站设计公司任何网络项目开始的第一步
  • 网站做ulr跳转百度高级搜索引擎入口
  • 创立网站做电商前端做网站直播