gpt4 book ai didi

c++ - 尽管使用 QProcess::startDetached() 命令行关闭

转载 作者:行者123 更新时间:2023-11-28 07:00:02 24 4
gpt4 key购买 nike

我正在尝试通过我的 Qt 应用程序中的 cmd.exe 中的批处理文件打开服务器。尽管我使用 QProcess::startDetached() 来启动命令行,但它会在启动后立即关闭。服务器正在启动,但不是“服务”进程被终止。这是我的代码:

void DICOMReceiver::startReceiver()
{
QProcess receiver;
boost::filesystem::path dbDir = boost::filesystem::absolute(databaseDirectory.toStdString());
receiver.startDetached("cmd.exe", QStringList() << "/c" <<
"dcmrcv.bat" << "AETitle:11112" << "-dest " << dbDir.string().c_str());
receiver.waitForStarted();
}

当我在 cmd.exe 中手动运行批处理文件时,它可以正常工作。有没有人知道如何保持进程运行以便我可以使用服务器?

最佳答案

  1. startDetached 是一个静态函数。您不需要流程实例。

  2. 您应该将工作目录传递给 startDetached。据我所知,它“关闭”是因为批处理文件不存在于它要查找的位置。

  3. 您的 waitForStarted() 调用是空操作,因为 startDetached 方法对您的 receiver 实例一无所知。您只是编写了欺骗您的混淆 C++。使用 Qt 时无法等待分离进程启动。分离进程是即发即弃的。

  4. 不要使用 waitForXxx 方法,因为它们会阻塞它们所在的线程,并使 UI 无响应。使用信号槽连接并改为编写异步代码。

所以,你的方法应该固定如下:

void DICOMReceiver::startReceiver()
{
boost::filesystem::path dbDir =
boost::filesystem::absolute(databaseDirectory.toStdString());
// FIXME
const QString batchPath = QStringLiteral("/path/to/the/batch/file");
QProcess::startDetached("cmd.exe", QStringList() << "/c"
<< "dcmrcv.bat" << "AETitle:11112" << "-dest "
<<< dbDir.string().c_str(), batchPath);
}

关于c++ - 尽管使用 QProcess::startDetached() 命令行关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com