c++ - 尝试在 C++ 代码中运行 C++ 可执行文件会停止程序
问题描述
我的目标:只要在网络摄像头中检测到对象,就会显示一个简单的消息框(“检测到对象”)。
我有一个显示网络摄像头 (display_cam.cc) 的 C++ opencv 代码。
我有另一个基本的 PySimpleGUI 代码,它在另一个 c++ 代码中运行,它只是显示一个带有文本“检测到对象”(gui.cc)的文本框。
在 display_cam.cc 里面我输入了这一行system("./gui");
现在的问题是,每当相机检测到物体时,GUI 框都会闪烁,但随后会暂停/暂停代码。我已经关闭 GUI 框,然后相机流继续,直到再次检测到对象并且代码再次暂停 GUI 闪存。
解决方案
std::system
将始终阻塞,直到命令退出。它需要,因为它返回命令的退出代码。
你有几种方法可以解决这个问题:
将
std::system()
调用放在它自己的std::thread中。在命令字符串中使用特定于平台的功能使其成为非阻塞的。例如,在 Linux、macOS 或任何其他
std::system()
恰好为您提供 Posix shell 的平台上,您可以尝试:system("./gui &")
尾随的 & 号 (
&
)在后台运行该进程。使用其他特定于平台的 API 而不是
std::system()
. 请参阅system() 的非阻塞版本(这是关于C API,而不是具体的C++,但解决方案应该是兼容的)。以某种方式重写您的
./gui
程序以立即退出其主进程,同时保持其图形窗口打开。同样,使用特定于平台的过程控制 API。
推荐阅读
- c# - 可以禁用组时的扩展授权
- javascript - 在 Discord JS 中延迟或减慢(TimeOut)命令
- javascript - 悬停离开动画
- angular - 我如何更改日期格式('yyyy-mm-dd')Angular
- c# - 如何将 Mono 应用程序分发到其他操作系统(没有安装 Mono)
- javascript - Reactjs:导入和加载外部 js 库缩小文件放在 src 中
- html - 如何让两个div并排
- vba - 访问 VBA 是否可以将项目传递给 WRITE # 过程,其中项目直到运行时才知道?
- c# - 每当尝试在 C# 中启动 HttpListener 时出现 HttpListenerException
- java - 尽管数组相同,java单元测试总是给出否定结果