我有一个进程,我想检查它是否正在运行,并在那个方向做出决定,即,我想从另一个实例检查此应用程序的运行实例。 / p>
我可以运行2个应用程序实例,处理2种类型的数据。当第三个实例打开时,它需要检查其类型的另一个实例(来自已创建的两种类型)是否已在运行。如果是这样,新的需要关闭并向已经运行的类型实例发送消息。
因此,我认为QtSingleApplication
不起作用。
我希望创建一个系统范围的互斥锁并以这种方式进行检查,但我在Qt中没有看到任何系统范围的互斥锁。
有QMutex,仅适用于应用程序的线程。
当我在线搜索时,还有一些名为QSystemMutex
的东西,但我想这是一个自定义解决方案?我没有在我的Qt安装或助手中找到它。
那么有什么方法可以使用Qt创建系统范围的互斥锁吗?
答案 0 :(得分:0)
互斥锁被定义为在一个进程中用作对象。您正在寻找解决方案之外的解决方案。
一个简单的解决方案是使用文件系统。创建一个文件并在进程停止时将其删除。但是,当从不同目录运行多个进程或应用程序崩溃时,这可能会更难。
更高级的解决方案是使用共享内存对象。这些对象存在于进程外部,可以从任何进程检查和修改。关于QT共享内存的示例可以在这里找到:
http://doc.qt.digia.com/4.7-snapshot/ipc-sharedmemory.html
答案 1 :(得分:0)
你绝对可以用QtSingleApplication
做到这一点。如果应用程序已在运行,则无需终止。您可以在QtSingleApplication
为您提供的基础上定义引导协议,即您将其api用作锁定原语。
您可以做的是将具有特定类型的消息发送到正在运行的实例,例如该类型的字符串表示形式。这很简单:您向正在运行的实例发送消息,并告诉您是否欢迎您。
ps:你所描述的并不完全是互斥体。以下代码
int main(int argc, char **argv) {
QtSingleApplication app(argc, argv);
if (app.isRunning())
return 0;
//blah blah blah
}
已经是互斥锁。