Qt 进程间通讯学习(windows共享段)
来源:互联网 发布:cnzz 阿里云备案 编辑:程序博客网 时间:2024/04/23 19:06
转自:http://hi.baidu.com/cyclone/blog/item/5c9382020cc2d1004bfb51bb.html
例子
main.cpp
没什么可说的
#include <QtGui/QApplication> #include "dialog.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Dialog w; w.show(); return a.exec(); }
dialog.h
简单的对话框类,很简单(注意,用到了winEvent)
#ifndef DIALOG_H #define DIALOG_H #include <QtGui/QDialog> class QLabel; class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog(); protected: bool winEvent(MSG *message, long *result); private: QLabel * m_label; unsigned long m_msgId; }; #endif // DIALOG_H
dialog.cpp
这是问题的重点
- g_count 放入共享段的全局变量
- 注意,MSVC 和 MinGW 二者共享段的代码不同
- m_msgId 注册的Windows消息,用来通知其他进程
#include <windows.h> #include <QtGui/QLabel> #include <QtGui/QHBoxLayout> #include "dialog.h" #ifdef Q_CC_MSVC #pragma data_seg("MyShared") #pragma comment(linker, "/Section:MyShared,RWS") #pragma comment(lib, "user32.lib") long g_count = 0; #pragma data_seg() #endif #ifdef Q_CC_GNU __attribute__((section ("MySHARED"), shared)) long g_count= 0; #endif Dialog::Dialog(QWidget *parent) : QDialog(parent),m_label(new QLabel) { QHBoxLayout * box = new QHBoxLayout(this); box->addWidget(m_label); setLayout(box); m_msgId = ::RegisterWindowMessageW(L"dbzhang-message-Qt4"); ::InterlockedExchangeAdd(&g_count, 1); ::PostMessageW(HWND_BROADCAST, m_msgId, 0, 0); m_label->setText(QString("Number of instances %1").arg(g_count)); } Dialog::~Dialog() { ::InterlockedExchangeAdd(&g_count, -1); ::PostMessageW(HWND_BROADCAST, m_msgId, 0, 0); } bool Dialog::winEvent(MSG *message, long *result) { if (message->message == m_msgId) { m_label->setText(QString("Number of instances %1").arg(g_count)); } return QDialog::winEvent(message, result); }
结果
- Qt 进程间通讯学习(windows共享段)
- Qt 进程间通讯学习(windows消息WM_COPYDATA)
- Qt 进程间通讯学习(windows消息WM_COPYDATA)
- Windows 下的进程间通讯及数据共享
- Windows 下的进程间通讯及数据共享
- Windows 下的进程间通讯及数据共享
- Windows 下的进程间通讯及数据共享
- Windows 下的进程间通讯及数据共享
- WINDOWS 进程间的通讯和数据共享
- Windows 下的进程间通讯及数据共享
- Windows 下的进程间通讯及数据共享
- Windows 下的进程间通讯及数据共享
- Windows 下的进程间通讯及数据共享
- Windows上C++使用共享内存进行进程间通讯
- 进程间通讯-共享内存
- 进程间通讯----共享内存
- 进程间通讯---共享内存
- 进程间通讯-共享内存
- cocos2d 对话框的使用
- eclipse 快捷键
- 关于flex开发中的跨域访问问题
- MFC 生成 exe文件的图标更改方法(转)
- 学习c第二天
- Qt 进程间通讯学习(windows共享段)
- 获取文件CRC和MD5
- drivers/media/video/ov511.c: Camera type (108) not recognized 问题解决
- hdu 5.2.5 产生冠军
- VSS客户端配置
- LoadRunner中IP欺骗功能详解
- xcode4 下 wax开发环境的搭建,Error opening wax scripts: loading wax stdlib: bad header in precompiled chunk
- C语言实现字符串拷贝并逆序的问题
- JavaScript表单验证大全