我正在玩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
答案 0 :(得分:2)
这绝对是一个错误,请阅读我的错误报告https://bugreports.qt.io/browse/QTBUG-27765
我最近附上了一个补丁来解决这个问题。如果你想修复这个问题,你需要投票。
答案 1 :(得分: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