【发布时间】:2016-07-06 19:27:29
【问题描述】:
我必须检查我的过程是否已完成,我需要将其转换为 bool,因为我想要你 if。
在 MainWindow.h 我创建了一个对象
QProcess *action;
在 mainwindow.cpp 中
void MainWindow:: shutdown()
{
action=new QProcess(this);
action->start("shutdown -s -t 600");
//and now I want to use if
if (action has finished)
{
QMessageBox msgBox;
msgBox.setText("Your computer will shutdown in 1 minute.");
msgBox.exec();
}
【问题讨论】:
-
waitForFinished函数或finished信号在完成后立即通知有什么问题? -
@JamesAdkison 这两个建议不属于同一个句子。
waitForFinished是一种阻止方法,使 UI 无响应。它不适用于交互式线程。 -
@KubaOber 我不听你的评论。第一个(在or之前)是一个阻塞函数,第二个(在or之后)是一个使用Qt信号槽机制的非阻塞解决方案。
-
@JamesAdkison 建议使用
waitForFinished方法或finished信号就像是在说“有一个苹果。或者一个同温层堡垒。”。在极少数情况下,waitFor方法是合适的。大多数尝试在 SO 问题(或答案)中使用它的人都不应该这样做。 -
@KubaOber 好的,我明白你的意思。需要明确的是,我并不是说它适合他们的用例(这肯定出现
shutdown是在主线程的上下文中执行的)。我本质上是在问“为什么这个(阻塞解决方案)或(非阻塞解决方案)对你不起作用?”