现在是将 QThread 与 QProcess 结合使用的合适时机吗?
Is this an appropriate time to use QThread with QProcess?
我正在为搅拌机制作渲染作业管理器。我有一个 class,它建立了一个渲染作业队列,然后您单击“开始”,它就会开始循环渲染一个渲染作业。我的问题是 waitForFinished()
方法阻碍了我的整个程序。但我读到你不应该将 QThread
与 QProcess
.
一起使用
这就是循环的工作原理。
do{
if(myProcess->state() == QProcess::NotRunning) {
myProcess->setProgram(blenderPath);
myProcess->setArguments(arguments);
myProcess->start();
myProcess->waitForFinished(-1);
//Get rid of current rendering job to prepare for the next job
renderQueueList.pop_front();
}
}while(renderQueueList.empty() != true);
我可以使用单独的线程来启动 QProcess 吗?最好的方法是什么?我读到过您对 QThread 进行了抽象或使用了信号和槽,但这太令人困惑了,特别是当我需要将参数传递给进程时。
谢谢。
编辑:
我想补充一点,该过程必须在 运行 开始新过程之前完成。它必须按顺序进行。这就是为什么我认为我需要在自己的线程中 运行 的过程。
QProcess 已经在不同的进程中执行,即与您的应用程序异步执行。
当您调用 waitForFinished() 时,应用程序会锁定,直到 QProcess 中的进程完成。您需要连接到 finished() 和可能的 errorOccured() 信号,然后您的应用程序将保持 运行ning 而 QProcess 运行s 在后台。
您需要将该循环更改为检查队列是否为空并在 finished() 信号上启动新进程。
如果你 运行 一个 QThread 运行s QProcesses 并执行 waitForFinished() 你确实会释放主应用程序线程,但是当 QProcess 已经异步并且你有have finished() 让你知道它何时完成而不锁定线程,无论是 UI 线程还是单独的线程。
我正在为搅拌机制作渲染作业管理器。我有一个 class,它建立了一个渲染作业队列,然后您单击“开始”,它就会开始循环渲染一个渲染作业。我的问题是 waitForFinished()
方法阻碍了我的整个程序。但我读到你不应该将 QThread
与 QProcess
.
这就是循环的工作原理。
do{
if(myProcess->state() == QProcess::NotRunning) {
myProcess->setProgram(blenderPath);
myProcess->setArguments(arguments);
myProcess->start();
myProcess->waitForFinished(-1);
//Get rid of current rendering job to prepare for the next job
renderQueueList.pop_front();
}
}while(renderQueueList.empty() != true);
我可以使用单独的线程来启动 QProcess 吗?最好的方法是什么?我读到过您对 QThread 进行了抽象或使用了信号和槽,但这太令人困惑了,特别是当我需要将参数传递给进程时。
谢谢。
编辑: 我想补充一点,该过程必须在 运行 开始新过程之前完成。它必须按顺序进行。这就是为什么我认为我需要在自己的线程中 运行 的过程。
QProcess 已经在不同的进程中执行,即与您的应用程序异步执行。
当您调用 waitForFinished() 时,应用程序会锁定,直到 QProcess 中的进程完成。您需要连接到 finished() 和可能的 errorOccured() 信号,然后您的应用程序将保持 运行ning 而 QProcess 运行s 在后台。
您需要将该循环更改为检查队列是否为空并在 finished() 信号上启动新进程。
如果你 运行 一个 QThread 运行s QProcesses 并执行 waitForFinished() 你确实会释放主应用程序线程,但是当 QProcess 已经异步并且你有have finished() 让你知道它何时完成而不锁定线程,无论是 UI 线程还是单独的线程。