让QT只运行1个实例.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
让QT只运行一个实例博客分类:?QTQLocalServer QLocalSocket QT单个实例???????目前使QT运行一个实例有三种方式:????????1.QSharedMemory????? 使用共享内存,当第二个进程启动时,判断内存区数据是否建立,如有,则退出; 这种方式有弊端,在程序发生崩溃时,未及时清除共享区数据,导致程序不能正常启动.???? 2. QtSingleApplication???? 使用QT扩展库QtSingleApplication,能很好的解决这个问题. 详见:?/products/qt-addons/solutions-archive. 里面就是用的QLocalServer/QLocalSocket建立本地socket来判断实例是否存在???? 3. 利用QLocalServer实现????? MyApplication.h???Cpp代码??class?MyApplication:public?QApplication??{??????Q_OBJECT??public:??????MyApplication(int?argc,char?**argv);????????bool?isRunning();????private?slots:??????void?newLocalConnection();????private:??????QLocalServer?*server;????????bool?_isRunning;??};?????????? MyApplication.cpp???Cpp代码??MyApplication::MyApplication(int?argc,?char?**argv):QApplication(argc,argv)??{??????_isRunning=false;????????QCoreApplication::setApplicationName(localserver);??????QString?serverName=QCoreApplication::applicationName();????????QLocalSocket?socket;??????socket.connectToServer(serverName);????????if(socket.waitForConnected(500))??????{??????????QTextStream?stream(socket);??????????QStringList?args=QCoreApplication::arguments();????????????if(args.count()1)??????????{??????????????streamargs.last();??????????}else??????????{??????????????streamQString();??????????}??????????stream.flush();??????????qDebug()Connected?server,program?will?quit;????????????socket.waitForBytesWritten();????????????/**??????????*qApp-quit();?此代码是用来退出事件循环的;在构造函数中,事件循环??????????*尚未启动,因此就无法退出.?最好就是设置标志判断在外部判断??????????*/??????????????_isRunning=true;????????????return;??????}????????qDebug()Cant?connect?to?server,build?a?server;??????server=new?QLocalServer(this);??????connect(server,SIGNAL(newConnection()),this,SLOT(newLocalConnection()));????????if(server-listen(serverName))??????{??????????//防止程序崩溃时,残留进程服务,移除之??????????if(server-serverError()==QAbstractSocket::AddressInUseErrorQFile::exists(server-serverName()))??????????{??????????????QFile::remove(server-serverName());??????????????server-listen(serverName);?????????

文档评论(0)

qhhb493 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档