我在 Windows7 平台上使用 Qt5。
我的应用程序是某种监听端口 8002 的 TCP 服务器,所以我只需要它的一个实例。
为了防止我的应用程序出现多个实例,我使用 (d) 下面的代码(在 StackOverflow 上找到):
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSharedMemory sharedMemory;
sharedMemory.setKey("TcpServer-Key");
if(sharedMemory.create(1) == false)
{
QMessageBox::warning(NULL, "Warning!", "Another instance already running!");
a.exit(); // exit already a process running
return 0;
}
...
嗯,在我将 Qt 升级到 5.5.1 之前,上面的代码曾经工作得很好。
现在,使用 Qt 5.5.1,我再也看不到警告消息框了!...当我尝试启动另一个实例时,正在运行的应用程序消失/停止并启动了一个新应用程序!!!
求助,我该怎么办?但是不要告诉我切换回 Qt 5.4.x :(
备注:我忘了提及我在测试期间设置并使用了 msvc2012 编译器(不是 minGW,因为我无法为其构建 log4cxx)。
更新:这可能是与该 PC 上安装的防病毒软件(在办公室,即 McAfee)相关的问题吗?...现在我在家(AVG 防病毒软件和 MinGW 编译器以及log4cxx 已删除),我无法重现上述问题 :(
最佳答案
我终于发现了问题所在...而且这不是防病毒软件的问题:)
当我将 Qt (Creator v3.6.0) 升级到最新版本 (5.5.1) 时,Tools->Options->Build&Run 中有一个名为 [Stop app before building] 的设置
... 设置为 Current project
或其他内容。因此,Qt Creator 在启动新实例(!)之前杀死了旧实例。
将此选项设置为 None
解决了这个问题。
所以,看起来代码很好,防病毒也很好,但是从 Qt Creator 中启动应用程序在某种程度上仅限于一个实例:)
我决定分享这个,也许对其他人也有帮助。
备注 :我再次检查,现在可以确认:该设置以前不存在,至少在 Qt Creator v3.3.2 中不存在。
关于c++ - Qt5 : Preventing another instance of the application doesn't work anymore. ..!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34445164/