繁体   English   中英

尽管使用QProcess :: startDetached(),命令行关闭

[英]Command Line closing despite using QProcess::startDetached()

我正在尝试通过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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM