QT exe只允许运行单个
【摘要】 在qt项目开发过程中,有部分的程序只允许在一台机器上运行一个程序,不允许同时运行多个,因此 需要使用啊代码来给他做一些限制。在网上可以搜到很多种使用的方法,我就拿我所使用的一个来举例子,大家感兴趣的话也可以去找找别的方法尝试一下。我所介绍的这个方法在我认为比较容易理解,而且比较简单。QSystemSemaphore类他提供了一个 具有计算功能的系统信号量 他的优点在于可以使用多个进程之间QS...
在qt项目开发过程中,有部分的程序只允许在一台机器上运行一个程序,不允许同时运行多个,因此 需要使用啊代码来给他做一些限制。
在网上可以搜到很多种使用的方法,我就拿我所使用的一个来举例子,大家感兴趣的话也可以去找找别的方法尝试一下。我所介绍的这个方法在我认为比较容易理解,而且比较简单。
QSystemSemaphore类他提供了一个 具有计算功能的系统信号量 他的优点在于可以使用多个进程之间
QSystemSemaphore sema("JAMKey",1,QSystemSemaphore::Open);
sema.acquire();
acquire() 这个函数可以获取一种资源。在没有资源可用的情况下,会将其进行阻塞处理,直到有资源可以使用 ,然后获取资源并返回调用。
QSharedMemory mem("SystemObject");
if (!mem.create(1))
{
QMessageBox::information(0, "提示","An instance has already been running.");
sema.release();
return 0;
}
sema.release();
create() 可以通过这个函数创建共享内存 向系统申请内存空间,在他不创建的情况下,调用attach()会失败,这个一定要注意!!!
在创建的时候,需要制定共享内存的大小,也就是他的字节数
在这儿使用的含义 如果全局对象已经存在则退出
QMessageBox 我么你可以用这个常用的弹框对他进行提示。以防用户认为他明明打开了为什么没有新的出现。
release 释放掉当前的资源,为了方便别的进程回去他的资源。 注意 :如果是 Unix 系统,会自动释放。 所亦可以写可以不写
总结
今天的更新到此结束,因为这一部分没有特别的熟悉,所以有错误的地方希望大家多多提出意见。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)