• 12485阅读
  • 14回复

【提问】请问使用QT编程时,怎样保证应用程序只启动一次 [复制链接]

上一主题 下一主题
离线kellydool
 

只看楼主 倒序阅读 楼主  发表于: 2005-09-21
请问使用QT编程时,怎样保证应用程序只启动一次,即在启动程序时如果该程序已经启动则只需激活,如果没有启动才启动它。麻烦各位大虾,帮忙解答一下,急,不胜感激
[ 此贴被XChinux在2005-09-21 14:21重新编辑 ]
离线XChinux

只看该作者 1楼 发表于: 2005-09-21
Socket?,哈哈,我好久都没想到。这个也许是一个好办法。
就是麻烦些。
在后台启动一个服务,监控前台需要启动的程序。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线kellydool

只看该作者 2楼 发表于: 2005-09-21
需单独做一个服务程序?在本程序中不能实现吗?如果那样是挺麻烦的
离线fanyu
只看该作者 3楼 发表于: 2005-09-21
推荐用互斥来做,简单方便。
以下是我以前用BCB写的互斥程序
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
  HANDLE hMutex = CreateMutex ( NULL, false, "FanyuSingleProgram" ) ;
  HANDLE windowhandle;
  if (WaitForSingleObject(hMutex,0)==WAIT_TIMEOUT)
  {
    MessageBox(NULL,"你的程序已经启动","信息",MB_OK|MB_ICONINFORMATION);
    exit (0);
  }

  Application->Initialize();
  Application->CreateForm(__classid(TForm1), &Form1);
  Application->Run();
}
catch (Exception &exception)
{
  Application->ShowException(&exception);
}
catch (...)
{
  try
  {
    throw Exception("");
  }
  catch (Exception &exception)
  {
    Application->ShowException(&exception);
  }
}
return 0;
}
//---------------------------------------------------------------------------
离线kellydool

只看该作者 4楼 发表于: 2005-09-21
您提供的方法是好,但如果我只用QT的类QMutex和QWaitCondition似乎不能完成以上的效果,因为 QMutex创建的是无名互斥量,而CreateMutex可以创建有名互斥量
离线yfy002

只看该作者 5楼 发表于: 2005-09-22
如果是windows平台,在main.cpp中加入头文件
#include <windows.h>

然后在QApplication的exec前加入
HANDLE hMutex = CreateMutexA ( NULL, false, "myProgram" );
if (WaitForSingleObject(hMutex,0)==WAIT_TIMEOUT)
{
  exit (0);
}

直接使用api实现
我渴望平静,风却给了我涟漪
我的blog:
http://sungaoyong.cublog.cn
离线yfy002

只看该作者 6楼 发表于: 2005-09-22
linux平台的如何实现请大家指点下。
我渴望平静,风却给了我涟漪
我的blog:
http://sungaoyong.cublog.cn
离线XChinux

只看该作者 7楼 发表于: 2005-09-22
发送信号量??
也可以看/proc
里啊
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yfy002

只看该作者 8楼 发表于: 2005-09-22
下面是引用XChinux于2005-09-22 09:18发表的:
发送信号量??
也可以看/proc
里啊

应该也有个api可以获取吧
我渴望平静,风却给了我涟漪
我的blog:
http://sungaoyong.cublog.cn
离线XChinux

只看该作者 9楼 发表于: 2005-09-22
Linux下面很灵活的,想找到同名的进程,用ps/grep的命令组合就能办到
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线myer

只看该作者 10楼 发表于: 2005-09-22
http://user.qzone.qq.com/56430808
离线kellydool

只看该作者 11楼 发表于: 2005-09-22
可惜的是我QT的版本3.3.2,不支持QtSingleApplication 这个类,因为没有注册认证什么的,也没法下载,遗憾!!
离线zhanglimin
只看该作者 12楼 发表于: 2008-11-29
创建共享内存在共享内存中做标记
离线zd_zhou
只看该作者 13楼 发表于: 2009-04-05
离线yleesun

只看该作者 14楼 发表于: 2009-04-07
在程序中用socket打开一个监听端口,在每次启动时判断此端口是否被占用,此问题可以解决。
快速回复
限100 字节
 
上一个 下一个