361203930 |
2017-05-21 08:51 |
QT5关于共享内存的问题,为什么在mingw版本可以而在vs版本不可以,这两个编译器什么导致这样的结果的?
这是读取数据方的头文件:.h #ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> #include<QLabel> #include<QGridLayout> #include"windows.h" class MainWindow : public QMainWindow { Q_OBJECT
public: MainWindow(QWidget *parent = 0); ~MainWindow(); public slots: void slottimeout(); public: QLabel *label; QGridLayout *mainlayout; private: HANDLE hMapFlie; LPVOID intbuf; int *pt; };
#endif // MAINWINDOW_H 这是读取数据方的源文件.cpp: #include "mainwindow.h" #include<QTimer>
#define BUF_SIZE 1025 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QTimer *timer=new QTimer; label=new QLabel(this); mainlayout=new QGridLayout(this); mainlayout->addWidget(label,1,0); connect(timer,SIGNAL(timeout()),this,SLOT(slottimeout())); timer->start(1000); char szName[] = "NameOfMappingObject"; // 共享内存的名字 hMapFlie=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,BUF_SIZE,(LPCTSTR)szName); intbuf=MapViewOfFile(hMapFlie,FILE_MAP_ALL_ACCESS,0,0,BUF_SIZE); pt=(int*)intbuf;
}
MainWindow::~MainWindow() { UnmapViewOfFile(intbuf); CloseHandle(hMapFlie);
} void MainWindow::slottimeout() {
label->setText(QString::number(*pt));
} 写数据方的头文件.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> #include<QLabel> #include<QGridLayout> #include"windows.h" class MainWindow : public QMainWindow { Q_OBJECT
public: MainWindow(QWidget *parent = 0); ~MainWindow(); public slots: void slottimeout(); public: QLabel *label; QGridLayout *mainlayout; private: int num; HANDLE hMapFlie; LPVOID intbuf; int *pt; };
#endif // MAINWINDOW_H 写数据方的源文件.cpp: #include "mainwindow.h" #include<QTimer>
#define BUF_SIZE 1025 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QTimer *timer=new QTimer; label=new QLabel(this); num=1000; mainlayout=new QGridLayout(this); mainlayout->addWidget(label,1,0);
timer->start(1000); char szName[] = "NameOfMappingObject"; // 共享内存的名字 hMapFlie=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,BUF_SIZE,(LPCTSTR)szName); intbuf=MapViewOfFile(hMapFlie,FILE_MAP_ALL_ACCESS,0,0,BUF_SIZE); pt=(int*)intbuf; *pt=num; connect(timer,SIGNAL(timeout()),this,SLOT(slottimeout()));
}
MainWindow::~MainWindow() { UnmapViewOfFile(intbuf); CloseHandle(hMapFlie);
} void MainWindow::slottimeout() {
num++; *pt=num; label->setText(QString::number(num));
} 现在有一个问题是,我用mingw的编译器去运行这段程序,能得到效果 [attachment=17152]
如果是用MSVC2013版本的QT,就会出错,我是安装了VS2013,用QT creator IDE写的,UTF-8带BOM,用VS2013的编译器和windbg调试器,是写数据方数据一直在变化,但读数据方显示的值却一直为0,不知道为什么,我把makefile也重新配置过了,也不行 |
|