QProcess закончил сигнал - PullRequest
       50

QProcess закончил сигнал

0 голосов
/ 29 января 2020

У нас есть QProcess, который запускает скрипт bash. Сценарий завершается должным образом и выдает ожидаемый результат, но для завершения готового сигнала требуется очень много времени (минут). По сути, наш скрипт генерирует зашифрованный тарбол из списка файлов, переданных в качестве аргумента. Последний пакет находится на диске в целости и сохранности, но процессу требуется очень много времени, чтобы вернуться. Это мешает нашему пользовательскому интерфейсу перейти к следующей задаче, потому что мы должны убедиться, что скрипт завершился программно, а не путем проверки. Мы не делаем ничего, кроме

connect(myProcess, SIGNAL(finished()), mySlot, SLOT(tidyUp()));
myProcess.start();

Мы можем отслеживать размер файла с помощью Qt, и у нас есть оценка его окончательного размера на основе списка файлов, который мы передаем сценарию, но сценарий зависает в течение очень долгого времени после того, как файл достиг своего предполагаемого размера. Мы вставили операторы syn c, но это, похоже, не имеет никакого эффекта. Когда скрипт запускается из командной строки, файл увеличивается, и скрипт останавливается, как только достигает своего окончательного размера.

Почему QProcess не отправляет сигнал о завершении сразу после завершения скрипта?

Мы бы очень хотели прикрепить индикатор выполнения, показывающий процент от произведенного размера файла, или дать какой-либо другой показатель прогресса, но мы озадачены этим поведением. Мы попытались использовать рабочий поток, перемещенный в QThread, и запустить QProcess непосредственно в занятом l oop, вызывая processEvents (), но безрезультатно.

1 Ответ

0 голосов
/ 02 февраля 2020

Оказывается, это была проблема с командами, которые у меня были в моей трубе. GPG извлекает файл довольно быстро (хотя и с довольно переменным временем), но затем часто тратит довольно много времени на работу вхолостую / работу после того, как сам файл достигает своего окончательного размера. Я не уверен, что он делает, или почему он работает только на некоторых запусках одного и того же контента, но в конце концов он завершается, сценарий завершается, и я получаю свой сигнал Finished (). Возможно, мне придется поставить более сложный индикатор выполнения, который переключается на ожидание «занято», если размер файла некоторое время не менялся, но похоже, что в конце концов Qt работает так, как и ожидалось.

...