您的位置:首页 > 编程语言 > Qt开发

使Qt程序只运行一个实例

2010-05-20 08:48 337 查看

版权声明

本文为原创作品,请尊重作者的劳动成果。转载必须保持文章完整性,并以超链接形式注明原始作者“


tingsking18


”和


主站点


地址,方便其他朋友提问和指正。

让应用程序只运行一个实例,这个问题很古老了。以及以前
HGR
老胡写过操作
event

delphi
版本的。当然在
win
下这样的解决方案还是很多的。


Qt
程序只运行一个实例,当然用
win
下的
native API
是很不靠谱的,因为这样会牺牲掉
Qt
跨平台的特性。所以我给出下面两种解决方案。原理上就是进程间通讯。
QSingleApplication
用的而是
socket
,而我使用的是共享内存。

1.

使用
QSingleApplication


QSingleApplication

Qt
提供的一个
solution
,它不包含在
Qt

library
中。遵循
LGPL
协议。关于如何使用,下载了这个
solution
之后,里面有例子。还有,
QtCreator
中还用到了它。你也可以翻一番
QtCreator
的源代码。

2.

使用共享内存。

//
确保只运行一次

QSystemSemaphore
sema("JAMKey",1,QSystemSemaphore::Open);

sema.acquire();//
在临界区操作共享内存

SharedMemory

QSharedMemory
mem("SystemObject");//
全局对象名

if
(!mem.create(1))//
如果全局对象以存在则退出

{


QMessageBox::information(0,
MESSAGEBOXTXT,"An instance has already been running.");


sema.release();//
如果是
Unix
系统,会自动释放。


return 0;

}

sema.release();//
临界区
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: