我在Windows7平台上使用Qt5。
我的应用程序是某种在端口8002上侦听的TCP服务器,所以我只想要它的一个实例。
为了防止我的应用程序的多个实例,我使用(d)下面的代码(在这里findStackOverflow):
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 🙁
备注 :我忘记提及在testing期间设置和使用msvc2012编译器(而不是minGW,因为我无法为它构buildlog4cxx)。
更新 :可能是一个相关的安装在该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中不存在。