作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我可以重新启动我的应用程序
QProcess::startDetached(QApplication::applicationFilePath());
exit(12);
但是如果我有 QtSingleApplication
新实例将不会运行。有没有办法欺骗 QtSingleApplication
以允许它在 isRunning()
可能通过某些命令行参数或其他方面返回 true
时运行新实例?
如果我在开头添加 Sleep(5000);
就完全没问题,但它看起来不像好的设计,我想我只需要一个额外的互斥锁来检测我的应用程序不见了:S 你怎么看?
最佳答案
当您想要将您的应用程序作为新的运行实例启动时,传递一个特定的参数以指示它应该关闭任何现有的而不是通常相反的方式。
这可以处理为
//code to send to instances
if(myturn)
{
if (a.isRunning()) {
QString rep("Another instance is running, so I will ask to leave.");
bool sentok = a.sendMessage(message_gtfo,1000);
if(!sentok)
return "some error";
}
}
//code to receive message from instance
connect(&a, SIGNAL(messageReceived(const QString&)),
&this, SLOT(handlMessage(const QString &))
);
...
void instancecomhandler::handlMessage(const QString & msg)
{
if(msg == message_gtfo)
//proceed to exit
}
编辑:
您仍然需要传递参数来修改行为。当另一个实例正在运行时,默认行为退出。新行为会一直等到另一个实例终止。
关于c++ - 如何重启QtSingleApplication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32306561/
是否有C++类的Python版本QtSingleApplication来自 Qt Solutions ? QtSingleApplication用于确保永远不会有多个应用程序实例同时运行。 最佳答案
自从我使用 QT 5.0.1(来自 http://qt-project.org/downloads)和模块 qtsingleapplication(来自 http://qt.gitorious.org
我是一名优秀的程序员,十分优秀!