c++ - 使 Qt5 应用程序的第二个实例将命令行参数传递给第一个实例

标签 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。

最佳答案

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

关于c++ - 使 Qt5 应用程序的第二个实例将命令行参数传递给第一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38779917/

相关文章:

c++ - 在 Qt5 中创建一个 QVideoWidget

c++ - 在线程内部函数上使用哪种保护方法(mutex、readwritelock ..)

c++ - 如何检查文件是否仅包含整数?

c++ - QWebSocket "Unknown Error"

c++ - 为什么 strlen() 比手动循环检查空终止字符快大约 20 倍?

c++ - 在 Eclipse 中使用 C 库到 C++ 项目

c++ - 冒号 : used in variable initialization?

python - boost Python : stop interpreter

c++ - 如何将系统图标放在菜单中?

c++ - 找不到 MyClass.cpp