查看完整版本: [-- QT5关于共享内存的问题,为什么在mingw版本可以而在vs版本不可以,这两个编译器什么导致这样的结果的? --]

QTCN开发网 -> Qt 作品展 -> QT5关于共享内存的问题,为什么在mingw版本可以而在vs版本不可以,这两个编译器什么导致这样的结果的? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

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也重新配置过了,也不行


查看完整版本: [-- QT5关于共享内存的问题,为什么在mingw版本可以而在vs版本不可以,这两个编译器什么导致这样的结果的? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled