• 7861阅读
  • 6回复

确保程序运行唯一实例的办法之一 [复制链接]

上一主题 下一主题
离线wanglehui_12
 

只看楼主 倒序阅读 楼主  发表于: 2008-12-22
— 本帖被 XChinux 执行加亮操作(2008-12-23) —
主要是通过Socket端口独占原理:

在main函数中添加如下代码

QUdpSocket TstSck;
if(TstSck.bind(QHostAddress("127.0.0.1"), 65500, QUdpSocket::DontShareAddress) == false)
{
    QMessageBox::warning(NULL, QObject::tr("程序运行检测"), QObject::tr("程序已经运行!"));
    return 0;
}


注意选择不用的端口。

另外的方式是采用全局互斥信号量(最好),但是我没有找到全局信号量创建函数。
离线water_wf

只看该作者 1楼 发表于: 2008-12-22
这个方法不错,可以多讨论下,不用创建临时文件,那端口号如何约定呢,万一那个端口被别的占用呢,另外如何跟另外一个已经运行的通讯,比如打开文件,那么我把这个文件发送过去,让它打开。
kde 里面有个KSingleApplication的类,负责这个的,没时间研究怎么是实现的,楼主我们多讨论下
离线stdjgwyc
只看该作者 2楼 发表于: 2008-12-22
学习
QT交流群群号:2906359,(200人大群,持续升级)
离线lazybone
只看该作者 3楼 发表于: 2008-12-23
当初遇到时记得有文件锁和端口号绑定俩常用方案
离线wanglehui_12

只看该作者 4楼 发表于: 2008-12-23
引用第1楼water_wf于2008-12-22 16:13发表的  :
这个方法不错,可以多讨论下,不用创建临时文件,那端口号如何约定呢,万一那个端口被别的占用呢,另外如何跟另外一个已经运行的通讯,比如打开文件,那么我把这个文件发送过去,让它打开。
kde 里面有个KSingleApplication的类,负责这个的,没时间研究怎么是实现的,楼主我们多讨论下


本地程序之间通信,我推荐使用 QLocalServer 和 QLocalSocket
我尝试了用QLocalServer进行端口锁定,没有成功。至于端口如何约定,我也没想出什么好办法。
最好有向VC中那样的全局信号量就好了,支持字符串命名,这样就不会冲突了。
离线duduqq

只看该作者 5楼 发表于: 2008-12-23
Qt商业版有个QSingleApplication类,网上好像有源代码。
离线wd007

只看该作者 6楼 发表于: 2008-12-23
学习了
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
快速回复
限100 字节
 
上一个 下一个