我正在制作一个Qt 5应用程序来读取某种类型的文件,我想将它限制为一个实例。我想将命令行参数从第二个实例传输到第一个实例,以便在用户双击该文件时打开一个文件。
我发现的大多数信息只是禁用运行第二个实例而不传递数据。我发现QLocalServer
但显然在GNU / Linux上应用程序崩溃时它没有被破坏,我也发现boost::interprocess::message_queue
但看起来我必须有一个专用线程会从中读取。这是我发现的最接近的事情:https://github.com/itay-grudev/SingleApplication/它提供了一个我可以收听的信号,但遗憾的是它并没有提供通过命令行的选项。
什么是最佳解决方案?我关心的操作系统是GNU / Linux,Mac,Windows,最好是Android。
答案 0 :(得分:0)
另一种方法是使用预定义的套接字名称或本地TCP套接字(在不支持unix套接字的平台上)创建和绑定unix域套接字。绑定仅对应用程序的第一个实例成功。当应用程序因任何原因终止时,操作系统将取消绑定套接字。当bind()
失败时,表示应用程序的另一个实例已在运行。第二个实例可以connect()
并使用此套接字将其命令行参数传递给第一个实例。
答案 1 :(得分:0)
好的,我已经关注了@ peppe的建议,并在this example中使用了代码并且有效。