3

我正在玩,QSharedMemory我不确定我是刚刚发现了一个严重的错误还是我做错了什么。情况是,如果不存在具有相同键的内存,则文档说QSharedMemory::create()应该返回 true,否则应该返回 false,并且QSharedMemory::error()应该检查发生了什么。

我目前的代码是:

QSharedMemory sm("smtest");
sm.setKey("smtest"); // <--- not needed as I already set the key in the initializator, but I'm leaving it anyways, just for the test
qDebug() << sm.create(1);
qDebug() << sm.create(1); //<--- I expect this to return false, but it returns true.
qDebug() << sm.error(); //<--. I expect this to return QSharedMemory::AlreadyExists, but QSharedMemory::NoError is returned instead.
//wtf?!

我的问题是:我是刚刚在 Qt4 中发现了一个非常大的错误,还是我做错了什么?

PS:此代码在 Windows 7 x64 上运行

编辑:为了清楚起见,如果我运行该代码两次,第二个应用程序应该检测到第一个,但它没有。

编辑 2:我在这里报告了一个错误https://bugreports.qt.io/browse/QTBUG-27744

4

2 回答 2

2

这绝对是一个错误,请阅读我的错误报告https://bugreports.qt.io/browse/QTBUG-27765

我最近附上了一个补丁来解决这个问题。如果你想解决这个问题,你需要投票。

于 2013-03-31T11:31:56.540 回答
1

我只是在 Linux 上运行它:

#include <QCoreApplication>
#include <QSharedMemory>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSharedMemory sm("smtest");
    sm.setKey("smtest"); // <--- not needed as I already set the key in the initializator, but I'm leaving it anyways, just for the test
    qDebug() << sm.create(1);
    qDebug() << sm.create(1); //<--- I expect this to return false, but it returns true.
    qDebug() << sm.error(); //<--. I expect this to return QSharedMemory::AlreadyExists, but QSharedMemory::NoError is returned instead.
    //wtf?!
    return 0;
}

并在第一次运行时得到

true
false 
4 

可能是您没有创建 QCoreApplication 吗?很多 Qt 的东西往往依赖于被创建的东西。

编辑:要强调的是,以上仅在第一次运行时发生。随后的运行总是给出假假。

Edit2:在 Windows 上,结果对我来说也是如此。

Edit3:似乎是一个错误,听起来很像这样:https ://bugreports.qt.io/browse/QTBUG-5123

于 2012-10-29T11:15:18.023 回答