0

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

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

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

提前致谢

4

1 回答 1

0

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

您应该简单地使用标准输入来满足您的目的。该进程不必等待标准输入,它可以检查是否有任何输入可用,如果有则读取它。如果您轮询共享内存段的更改,您将在同一个地方执行此操作。

对于 Unix 系统,您可以使用QSocketNotifier在标准输入可用时获得通知。

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

于 2015-06-25T19:57:41.080 回答