Qt5:防止该应用程序的另一个实例不再工作......!

时间:2015-12-23 23:15:40

标签: c++ windows qt process instance

我在Windows7平台上使用Qt5 我的应用程序是某种TCP服务器侦听端口8002,所以我只想要它的一个实例 为了防止我的应用程序的多个实例,我使用(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已删除),我无法重现上述问题:(

1 个答案:

答案 0 :(得分:1)

终于发现了问题所在......并且它不是被指责的杀毒软件:) 当我将Qt(Creator v3.6.0)升级到最新版本(5.5.1)时,工具 - >选项 - >构建和运行中有一个名为[Stop app before building]的设置......设置为Current project或其他东西。因此,Qt Creator在启动新实例之前杀死了旧实例(!) 将此选项设置为None即可解决问题 所以,似乎代码很好,防病毒很好,但是从Qt Creator中启动应用程序仅限于一个实例:)

我决定分享这个(作为答案),也许它对其他人也有帮助。

备注:我再次检查,现在我可以确认:此设置之前并不存在,至少在Qt Creator v3.3.2中没有。