Как быть уверенным, что команда mount фактически завершена в процессе qt - PullRequest
0 голосов
/ 01 октября 2019

Я разрабатываю программу, написанную на qt5, где мне нужно смонтировать некоторые устройства (USB DRIVE) и показать в графическом интерфейсе содержимое этого устройства. Я использую QProcess () для монтирования устройства, и после этого я исследую папку, в которую должно быть смонтировано устройство. К сожалению, только несколько файлов могут быть найдены.

Я попытался добавить QThread :: sleep () после команды mount, и это действительно работает для небольших устройств. Таким образом, кажется, что правильность моего подхода зависит от того, сколько я жду, пока система фактически установит устройство.

pr3.start("mount foo foo");
pr3.waitForFinished(-1);
QThread::sleep(6); //This is a patch but it fail depending on the amount of file stored in the device

Есть ли способ убедиться, что QProcess ("mount") завершился правильно? Я пробовал wawtforfinished (-1) метод QProcess, но, похоже, он не работает.

Спасибо

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Прежде всего, я бы посоветовал вам использовать следующий сигнал finished() и подключить его к слоту, который проверяет код выхода и статус выхода вместо использования waitForFinished(). Действительно, в документации говорится о waitForFinished(), что:

Предупреждение: Вызов этой функции из основного потока (GUI) может привести к тому, что ваш пользовательский интерфейсfreeze.

Конечно, предполагается, что у вас есть цикл обработки событий.


Другое дело, ваша команда mount foo foo кажется неправильной. Первый параметр - это само устройство, а второй - каталог, в котором его монтируют. Вы не можете дважды ввести один и тот же параметр.


Пожалуйста, дайте мне знать, если это не поможет решить вашу проблему.

0 голосов
/ 01 октября 2019

Я попробовал wawtforfinished (-1) метод QProcess, но, похоже, он не работает.

Это большой красный флаг, что-то странное происходит.

При запрограммированном запуске дочерних процессов много ошибок и отчетов обычно в порядке.

Также это может включать, но не ограничивается тем, что команда mount не работает какожидается и т. д.

...