• 4105阅读
  • 0回复

QT5关于共享内存的问题,为什么在mingw版本可以而在vs版本不可以,这两个编译器什么导致这样的结果的? [复制链接]

上一主题 下一主题
离线361203930
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2017-05-21
这是读取数据方的头文件:.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的编译器去运行这段程序,能得到效果
window.open('http://www.qtcn.org/bbs/attachment/Mon_1705/44_180339_a806f6d5fc91531.png?13');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >

如果是用MSVC2013版本的QT,就会出错,我是安装了VS2013,用QT creator IDE写的,UTF-8带BOM,用VS2013的编译器和windbg调试器,是写数据方数据一直在变化,但读数据方显示的值却一直为0,不知道为什么,我把makefile也重新配置过了,也不行
快速回复
限100 字节
 
上一个 下一个