0

由于我的程序的组织方式,我有一个想使用 execvp() 调用的 C++ 函数。

这可能吗?

4

3 回答 3

5

包括 execvp() 在内的所有 exec 变体只能调用文件系统中可见的完整程序。好消息是,如果你想在你已经加载的程序中调用一个函数,你只需要 fork()。它看起来像这样的伪代码:

int pid = fork();
如果(pid == 0){
    // 在这里调用你的函数。这是一个新的过程,任何
    // 您所做的更改不会反映回父级
    // 变量。小心文件和共享资源,例如
    // 数据库连接。
    _exit(0);
}
否则如果(pid == -1){
    // 发生错误,fork() 失败。这是一个非常罕见的
    // 错误,但你必须处理它。
}
别的 {
    // 等待孩子完成。您可以使用信号处理程序
    // 如果孩子需要很长时间,则稍后再捕获它。
    waitpid(pid, ...);
}
于 2009-03-16T01:14:42.843 回答
2

excecvp()意味着启动程序而不是函数。因此,您必须将该函数包装到已编译的可执行文件中,然后让该文件的 main 调用您的函数。

于 2009-03-16T01:06:35.153 回答
0

创建流程可能是重量级的。如果您真的只想并行调用您的函数,为什么不使用线程。有许多独立于平台的库可以支持 C++ 的线程,例如BoostQTACE

If you really need your function to be executed in another process you can use fork or vfork. vfork may not be available on every platform and it has it's drawbacks so make sure if you can use it. If not just use fork.

于 2009-04-09T17:15:13.380 回答