Qt下程序要实现单实例,用什么方法比较好?

Jonix 2013-01-15 05:56:16
我以前在BC下使用的是原子法,这个方法在Windows以外的OS中肯定不能用了。

那一般标准用哪种方式呢?

我看到网上有说:QLocalSocket,QLocalServer 方法的。
...全文
505 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
AAA20090987 2013-01-19
  • 打赏
  • 举报
回复
楼上说了那么多方法,我觉得还是QSharedMemory最好用。
crichtan 2013-01-18
  • 打赏
  • 举报
回复
sharememory就好了,
BenKwan 2013-01-16
  • 打赏
  • 举报
回复
http://doc.qt.digia.com/solutions/4/qtsingleapplication/qtsingleapplication.html

#include <QtGui/QApplication>
#include <QSharedMemory>
#include <QDebug>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    int ret = 0;
    QSharedMemory sharedMemory("UniqueNameForApplication"); 
    if (sharedMemory.create(1) && sharedMemory.error() != QSharedMemory::AlreadyExists)
    {
        qDebug() << "This is the only instance";
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        ret = a.exec();
    }
    else  
    {
        qDebug() << "This is not the first instance";
    }
    
    return ret;
}
moxiaofeng77 2013-01-16
  • 打赏
  • 举报
回复
引用 1 楼 jdwx1 的回复:
一般本人用最笨的办法,建个文件,有这个文件说明就有一个程序在运行。程序关闭了就删除文件。 内存文件也可。
万一运行是程序崩溃,就再也起不来了
moxiaofeng77 2013-01-16
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390268072 这个帖子里我回答过。。。 Qt下实现单实例,可以使用QSignalApplication和QSharedMemory,但是QSignalApplication好像是Qt商业版里才有,另外Linux下用DBUS,或者在启动程序的时候使用系统API查询进程,看是否已经运行。
Jonix 2013-01-15
  • 打赏
  • 举报
回复
引用 5 楼 feilinhe 的回复:
去看本人的博客:http://blog.csdn.net/feilinhe/article/details/5517637
看到了,两者分别有什么优缺点呢?
feilinhe 2013-01-15
  • 打赏
  • 举报
回复
Jonix 2013-01-15
  • 打赏
  • 举报
回复
这个很好用,好象还跨平台,推荐一下: http://blog.csdn.net/qq19831030qq/article/details/6199896
乔巴好萌 2013-01-15
  • 打赏
  • 举报
回复
windows下一般创建一个核心对象 启动时 先检查是否已经有同名的核心对象存在 如存在 则认为进程已经起来了 linux下一般启动后 会将当前的pid写入一个.pid文件里 然后下次启动的时候 给.pid文件里的进程号发一个kill -0 的信号量 表示检测对应的进程号是否存在
Jonix 2013-01-15
  • 打赏
  • 举报
回复
引用 1 楼 jdwx1 的回复:
一般本人用最笨的办法,建个文件,有这个文件说明就有一个程序在运行。程序关闭了就删除文件。 内存文件也可。
万一程序死机了,或掉电了,那就永远起不来了。。。
jdwx 2013-01-15
  • 打赏
  • 举报
回复
一般本人用最笨的办法,建个文件,有这个文件说明就有一个程序在运行。程序关闭了就删除文件。 内存文件也可。

16,819

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧