【问题标题】:C++ best practices for running other programs from within 'main'从“main”中运行其他程序的 C++ 最佳实践
【发布时间】:2018-11-22 23:17:05
【问题描述】:

所以我有一个简短的程序,它必须运行一些其他程序并等待它们完成。

目前我在我的主要方法中这样做:

// Connect to the service
cout << "Starting the service..." << endl;
status = system((SCRIPT_DIR + "/my_service").c_str());
if (WIFEXITED(status)) {
    cout << "Started service successfully" << endl;
} else {
    cerr << "Failed to start the service." << endl;
    return (EXIT_FAILURE);
}

我的主要操作看起来有点恶心,因为我必须多次这样做;这是应该做的地方吗?或者我应该把它分解成一个类或函数,这样我就不会在 main 中检查所有这些错误?

也欢迎任何其他建议!

【问题讨论】:

  • 那为什么不把它放在一个函数中呢?
  • 把它包装在一个函数中。
  • 然后从我的函数返回状态并在 main 中检查?
  • 有可能出现异常。
  • 看看 Poco C++ 库,它为此提供了一个很好的类,即 Poco::Process .. 你可以简单地调用一个非阻塞的 launch(...) 方法并等待使用阻塞 wait() 方法获取 std::out 和退出代码的结果。它还提供了一个 ready() 函数,您可以在状态机中进行轮询。

标签: c++ class main error-checking


【解决方案1】:

您可以为每个要运行的“其他程序”创建一个线程。但是,这可能只有在每个“其他程序”的工作独立于其他“其他程序”的结果或变量时才有效

【讨论】:

    【解决方案2】:

    同步方式是在阻塞函数中启动服务并返回退出值。您将一一启动服务并等待它们完成。

    异步:

    所有服务都可以并行运行。您可以启动线程并加入它们。因此,当他们完成时,您检索退出值。

    或者,您可以 fork() 并使用管道,以便让父亲向各个孩子发出命令(启动不同的程序)

    【讨论】:

    • 好的,谢谢。它需要在其余代码继续之前完成,所以我将它放在一个函数中并检查退出值!
    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多