我正在使用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

最佳答案

我只是在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东西往往取决于所创建的东西。

编辑:要强调,以上仅在首次运行时发生。随后的运行始终给出false-false。

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

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

关于c++ - Windows中的QSharedMemory行为不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13120374/

10-10 14:24