使第一个实例的Qt5应用程序转移命令行参数的第二个实例

时间:2016-08-05 01:51:46

标签: c++ qt qt5 c++14

我正在制作一个Qt 5应用程序来读取某种类型的文件,我想将它限制为一个实例。我想将命令行参数从第二个实例传输到第一个实例,以便在用户双击该文件时打开一个文件。

我发现的大多数信息只是禁用运行第二个实例而不传递数据。我发现QLocalServer但显然在GNU / Linux上应用程序崩溃时它没有被破坏,我也发现boost::interprocess::message_queue但看起来我必须有一个专用线程会从中读取。这是我发现的最接近的事情:https://github.com/itay-grudev/SingleApplication/它提供了一个我可以收听的信号,但遗憾的是它并没有提供通过命令行的选项。

什么是最佳解决方案?我关心的操作系统是GNU / Linux,Mac,Windows,最好是Android。

2 个答案:

答案 0 :(得分:0)

另一种方法是使用预定义的套接字名称或本地TCP套接字(在不支持unix套接字的平台上)创建和绑定unix域套接字。绑定仅对应用程序的第一个实例成功。当应用程序因任何原因终止时,操作系统将取消绑定套接字。当bind()失败时,表示应用程序的另一个实例已在运行。第二个实例可以connect()并使用此套接字将其命令行参数传递给第一个实例。

答案 1 :(得分:0)

好的,我已经关注了@ peppe的建议,并在this example中使用了代码并且有效。