恕我直言,最简单的方法是使用线程。如果您对使用线程的唯一反对意见是线程将被终止,您可以通过在退出进程之前等待线程完成来克服它。
void doSomething();
int main (int argc, char *argv[])
{
QApplication app(argc, argv);
...
// Start a doSomething() in another thread using pure C++11
std::thread cppThread(&doSomething);
// The same using Qt
QFuture<void> qtThreadResult = QtConcurrent::run(&doSomething);
...
int r = app.exec();
...
// The Qt application is closed
// We wait for the thread to complete
cppThread.join();
// The same using Qt
qtThreadResult.waitForFinished();
// Everything is finished, we can exit
return r;
}
如果您绝对需要创建另一个进程,您有 2 个解决方案,或者您创建 2 个程序 A 和 B,然后从 A 启动 B,或者您有一个程序并且您需要提供命令行参数以便它可以改变它的行为。
void doSomething();
int main (int argc, char *argv[])
{
QApplication app(argc, argv);
if (app.arguments().contains("--foo"))
{
doSomething();
return 0;
}
else
{
return app.exec();
}
}
然后您可以使用 Qt 启动新进程:
QProcess::startDetached("B");
QProcess::startDetached("A --foo");
QProcess::startDetached(QCoreApplication::applicationFilePath(), QStringList{"--foo"});
使用纯 C++ 会稍微复杂一些。您在所有平台上都有system(),但如果您需要操作创建的进程,它并没有提供很多选择。然后,您将拥有特定于平台的解决方案,例如 Linux 上的 execl() (& co.) 和 Windows 上的 CreateProcess()。
还要注意,如果您需要在 2 个进程之间共享数据,这可能会变得更加复杂;您将需要使用共享内存或套接字或管道或标准输入/标准输出...