彩票走势图

教你两种方法解决只运行一个Qt程序

转帖|其它|编辑:郝浩|2010-05-24 14:08:25.000|阅读 2190 次

概述:让 Qt 程序只运行一个实例,当然用 win 下的 native API 是很不靠谱的,因为这样会牺牲掉 Qt 跨平台的特性。所以本文介绍两种解决方案。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  让应用程序只运行一个实例,这个问题很古老了。让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();// 临界区


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP