c++ - Qt5 : Preventing another instance of the application doesn't work anymore. ..!

标签 c++ windows qt process instance

我在 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/

相关文章:

c++ - 如何在 C++ 中使用 tagDEC(DECIMAL 类型)?

qt - 如何将 QModelIndex 与新行关联?

c++ - Vulkan 存储缓冲区与图像采样器

linux - 如何从 Linux 获取 Windows 产品类型(家庭、专业或终极)?

windows - 在 go 中提供 samba 文件的矛盾性能

c++ - 如何使用Qt实现三态按钮

c++ - Qt正则表达式在[]之间分割字符串

c++ - 从 unsigned char 数组转换为 double

c++ - 从 C++ 调用 python eval

c++ - 一个类作为另一个类的友元的成员函数