Qt便携式IPC:只有QSharedMemory?

发布于 2024-08-11 08:37:56 字数 509 浏览 5 评论 0原文

我正在寻找有关选择一种可移植的方式以稳健的方式实现本地 IPC 的建议,因为我是 C++ 新手,并且希望避免摆弄共享内存和锁的常见陷阱;因此我正在考虑消息传递风格的 ipc。

无论如何,我打算出于其他原因使用 qt,因此我查看了 Qt ipc 选项。

如果我理解正确的话,qt 不提供完全可移植的消息传递 ipc 功能。它可以使用d-bus,但在Windows上使用它会出现问题。其他方式仅限于嵌入式Linux平台(我想将这个东西移植到AIX)。

我找不到使用 QSharedMemory 和 QSystemSemaphores 的“信号和槽”或消息传递样式实现

因此:我是否仅限于在 QSM/QSS 上实现功能? 我还可以学习哪些其他选择? posix管道?协议缓冲区?增加队列和消息?

我正在考虑在 LGPL/GPL 风格许可证下发布代码,这是否排除了协议缓冲区或 boost 库?

再次强调,接口必须简单且适合新手(否则我肯定会把事情搞砸:)),类型的序列化/反序列化、错误处理和资源处置也应该如此。

I'm looking for suggestions about choosing a portable way to achieve local IPC in a robust way, since i'm new to C++ and would like to avoid common pitfalls of fiddling with shared memory and locks; therefore I was thinking about message-passing style ipc.

I was planning to use qt for other reasons anyway, thus i took a peek to Qt ipc options.

if i understand correctly qt doesn't offer a completely portable message-passing ipc feature. it can use d-bus, but using it on windows would be a problem. other ways are limited to embedded linux platforms (and i would like to port this thing to AIX).

I could not find a "signal and slots" or message-passing style implementation that uses QSharedMemory and QSystemSemaphores

Thus: Am I limited to implement a feature on QSM/QSS?
what other options could i study?
posix pipes? protocol buffers? boost queues and messages ?

I'm considering to release the code under LGPL/GPL style license, does this rule out protocol buffers or boost libs?

please, again, the interface must be simple and newbie-proof (otherwise i definitely will screw up things big time for sure :) ), and so should the serialization/deserialization of types, error handling and resource disposal.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

魔法少女 2024-08-18 08:37:56

看一下Boost.Interprocess,它提供了很多 IPC 功能。我已经使用了进程间 message_queue 它提供了一种非常干净且简单的方法来完成我认为您想做的事情。

Take a look at Boost.Interprocess which provides a lot of IPC functionality. I have used the interprocess message_queue that provides a pretty clean and easy way to do what I think you want to do.

聚集的泪 2024-08-18 08:37:56

您可以使用 QLocalSocketQlocalServer 也适用于 IPC。
这两个类确实很容易使用,并且它们的实现方式几乎与使用 Qt TCP 套接字客户端/服务器相同。

您可以观看其中一些 YouTube 视频:

QTCPServer - 基本 TCP 服务器应用程序

使用多线程的 QTcpServer

(几乎相同的原则适用于“本地”服务器/客户端“TCP”)

You can use QLocalSocket and QlocalServer for IPC too.
Those two classes are really easy to use and they can be implemented ~almost the same way as you would using Qt TCP socket client/server.

You can take a look at some of these youtube videos:

QTCPServer - a basic TCP server application

QTcpServer using multiple threads

(Almost the sames principles would apply for "Local" server/client instead of "TCP")

梦萦几度 2024-08-18 08:37:56

作为 Qt 5.9,有一个模块当前处于技术预览名称 QtRemoteObjects 它为 QObjects 提供了 Qt 原生 IPC,它易于使用,可用于在两个进程之间共享信号/槽以及模型。

它适用于 Linux、Windows 和 Android

As Qt 5.9, there is module which is currently under technology preview name QtRemoteObjects which provides Qt native IPC for QObjects, its easy to use and could be used to share signal/slots and also models between two processes.

Its works well for Linux, Windows and android

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文