转载自 http://blog.csdn.net/tingsking18/article/details/5610123
使Qt程序只运行一个实例
精选 转载让应用程序只运行一个实例,这个问题很古老了。以及以前 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();// 临界区
上一篇:取得汉字的UTF8编码
下一篇:Qt线程
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
如何使应用程序只运行一个实例
要使应用程序产生的全局标志" 本例中产生的语句如下:#define o
null c 应用程序 互斥量 #define -
让QT只运行一个实例
目前使QT运行一个实例有三种方式: 1.QSharedMemory
QT 事件循环 Memory -
程序只运行一个实例
让 <br /> Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许
windows delphi forms winapi function -
wpf只运行一个实例
在winform下,只运行一个实例只需这样就可以:1. 首先要添加如下的namespace:u
wpf application object winform class -
让程序只运行一个实例(Delphi篇)
Windows 下一个典型
delphi windows integer forms 任务 -
Delphi----怎样保证程序只运行一个实例
在project启动文件编辑以下内容,可保
数据 ide 启动文件 -
Qt 之运行一个实例进程
简述发布程序的时候,我们alServerQtSingleApplication任务列表更多参考QS
Qt Qt一个进程 Qt单一进程 Qt一个实例 Qt-Single -
Qt 只运行一个程序实例 -QLockFile -QSystemSemaphore 和 QSharedMemory应用程序 共享内存 信号量 测试程序 临时文件