首页 > 解决方案 > 尝试在 C++ 代码中运行 C++ 可执行文件会停止程序

问题描述

我的目标:只要在网络摄像头中检测到对象,就会显示一个简单的消息框(“检测到对象”)。

我有一个显示网络摄像头 (display_cam.cc) 的 C++ opencv 代码。

我有另一个基本的 PySimpleGUI 代码,它在另一个 c++ 代码中运行,它只是显示一个带有文本“检测到对象”(gui.cc)的文本框。

在 display_cam.cc 里面我输入了这一行system("./gui");

现在的问题是,每当相机检测到物体时,GUI 框都会闪烁,但随后会暂停/暂停代码。我已经关闭 GUI 框,然后相机流继续,直到再次检测到对象并且代码再次暂停 GUI 闪存。

标签: c++python-3.xpysimplegui

解决方案


std::system将始终阻塞,直到命令退出。它需要,因为它返回命令的退出代码。

你有几种方法可以解决这个问题:

  1. std::system()调用放在它自己的std::thread中。

  2. 在命令字符串中使用特定于平台的功能使其成为非阻塞的。例如,在 Linux、macOS 或任何其他std::system()恰好为您提供 Posix shell 的平台上,您可以尝试:

    system("./gui &")
    

    尾随的 & 号 ( &)在后台运行该进程

  3. 使用其他特定于平台的 API 而不是std::system(). 请参阅system() 的非阻塞版本(这是关于C API,而不是具体的C++,但解决方案应该是兼容的)。

  4. 以某种方式重写您的./gui程序以立即退出其主进程,同时保持其图形窗口打开。同样,使用特定于平台的过程控制 API。


推荐阅读