在 C++ 中调用类似于 unix shell 脚本的函数
Posted
技术标签:
【中文标题】在 C++ 中调用类似于 unix shell 脚本的函数【英文标题】:call a function in background in c++ similar to unix shell scripting 【发布时间】:2012-04-16 18:42:01 【问题描述】:我想在 c++ 中并行调用函数,该函数将接受输入并执行一些格式化、验证、增强等。
在 unix 中,我可以在循环中调用它并将值作为参数传递给在 BG & 中运行的函数。
shell 脚本中的示例是:
echo $value | while read arg1 arg2
do
parser arg1 arg2 &
done
wait
如何在 c++ 中使用/不使用多线程?
谢谢...
【问题讨论】:
如果您不是在多线程环境中执行,那么您所要求的可能并不容易实现。我的建议是学习线程。 您列出了 visual-c++ 和 unix。您是在寻找可移植到 windows 和 unix 的良好解决方案,还是两者之一的理想解决方案? 在 Unix 和 Windows 上运行,我的 c++ pogram 必须从 unix env 获取一些数据并执行某些操作。目前我没有权限访问 unix env 上的编译器。我已提出请求,但不确定需要多长时间。 多个进程在Posix中使用fork
和exec
启动;多个 threads 是 pthreads 的句柄。
@TokenMacGuy 你能指点我一个 c/c++ 示例,其中完成了类似的事情。多次使用 fork 调用函数,类似于我在上面的脚本中所做的。当我将其与上面的脚本进行比较时,无法超越父子概念。
【参考方案1】:
为了“在后台”或“并行”运行,您必须使用多线程(在同一进程中使用多个线程,或使用多个进程,具体取决于具体情况)。每当你想在后台运行某些东西时,你应该创建一个新的线程/进程,并告诉它运行你想要在后台运行的代码,并继续在原始线程/进程中执行其余代码。
【讨论】:
【参考方案2】:正如其他人所指出的,您必须创建子进程或线程。这两种技术都需要系统相关的代码。如果您想独立于系统并可以访问支持它的编译器(我不知道有任何编译器不支持),您可以使用OpenMP 来执行多线程。但是,这种技术主要适用于所有线程执行相同操作的问题。
【讨论】:
以上是关于在 C++ 中调用类似于 unix shell 脚本的函数的主要内容,如果未能解决你的问题,请参考以下文章
将 C++ std::clog 重定向到 Unix 上的 syslog
我们在 C 或 C++ 中是不是有类似于 IPC::Open3 的 perl