【发布时间】:2013-02-18 09:15:22
【问题描述】:
我有一个进程,我想检查它是否正在运行,并朝那个方向做出决定,即我想从另一个实例检查此应用程序的运行实例。
我可以运行 2 个应用程序实例,处理 2 种类型的数据。当第三个实例打开时,它需要检查其类型的另一个实例(来自已创建的 2 个类型)是否已经在运行。如果是这样,新的需要关闭并向其类型的已运行实例发送消息。
因此,我认为QtSingleApplication 将不起作用。
我希望创建一个系统范围的互斥体并以这种方式完成检查,但我在 Qt 中没有看到任何系统范围的互斥体。
还有QMutex,它只适用于应用程序的线程。
当我在线搜索时,还有一个叫做QSystemMutex的东西,但我想这是一个自定义解决方案?我没有在我的 Qt 安装或助手中找到它。
请问有什么方法可以使用 Qt 创建系统范围的互斥锁吗?
【问题讨论】:
-
你知道为什么
QtSingleApplication不起作用吗?? -
我可以运行 2 个应用程序实例,处理 2 种类型的数据。当第三个实例打开时,它需要检查其类型的另一个实例(来自已创建的 2 个类型)是否已经在运行。如果是这样,新的需要关闭并向其类型的已运行实例发送消息。在这种情况下,QtSingleApplication 根本不起作用。
-
它应该可以工作。不是只需要根据类型给QtSingleApplication构造函数设置appId参数吗?
-
更像这样。我有一个应用程序,它可以处理多种类型的数据。假设为 A 类型启动了一个应用程序实例。然后是 B 类型应用程序的一个实例。这是允许的。现在再次打开一个类型 A 的实例。它需要检查类型 A 的实例是否已经在运行,如果是,则将消息传递给它,然后关闭。这一切都不能用
QtSIngleApplication来管理。所以我想,当 A 类型启动时,创建一个 A 类型的系统范围的互斥锁和一个共享内存。如果另一个实例未能创建该互斥体,它将关闭。 -
这正是
QtSinglaApplication app("MyApp type A", argc, argv); if( app.isRunning() ) sendMessage("My Message");应该做的。为什么你如此确信它不会起作用?