QShared内存用于外部运行的进程?

时间:2015-06-25 16:44:24

标签: qt ipc qsharedmemory

我有一个调用外部可执行文件的QApplication。这个可执行文件将继续无限运行,通过stdout将数据传递给此QApplication,除非它是由从控制台运行它的用户手动退出的。此进程在运行时不会等待stdin(它是一个简单的c ++代码,它作为具有while循环的可执行文件运行)。

我希望能够在运行时通过从QApplication向外部进程发送某种形式的信号来修改此可执行文件的行为。我读到了QT的IPC,我认为QSharedMemory是实现这一目标的最简单方法。我不能使用任何管道等,因为这个过程不是在等待标准输入。

是否可能存在由QApplication共享的QSharedMemory以及外部运行的非QT应用程序的进程。如果是的话,有没有人能指出我的例子;我试图找到一些,但无法做到。如果没有,在我的特定情况下可能还有哪些其他选项可用?

提前致谢

1 个答案:

答案 0 :(得分:0)

您必须等待任何类型的I / O的想法大多过时了。您应该设计代码,以便在I / O请求完成后立即通过操作系统通知(可用新输入数据,发送输出数据等)。

您应该只是为了您的目的使用标准输入。该过程不必等待标准输入,它可以检查是否有任何输入,如果有,则读取它。如果您轮询共享内存段的更改,则可以在同一位置执行此操作。

对于Unix系统,您可以use QSocketNotifier在标准输入可用时收到通知。

在Windows上,最简单的测试是_kbhit,其他解决方案请参阅this answerQWinEventNotifier也适用于Windows上的控制台句柄。