WiringPi gpio, вызываемый system(), должен использовать другой процесс?

В соответствии с этим я использую функцию system () ( QProcess) внутри моей программы для вызова программы gpio.

Оно работает. Но я заметил, что мне нужно запустить мое приложение два раза, фактически оно работает только во второй раз. Кажется, что вызов gpio должен быть выполнен в другом процессе, как указано здесь.

Следует ли решить эту проблему с помощью QProcess:: setupChildProcess ()?

Я расширил QProcess, перезаписывая setupChildProcess, а затем просто создал экземпляр SandboxProcess в конструкторе моего приложения. К сожалению, это не сработало.

class SandboxProcess : public QProcess
{
 protected:
     void setupChildProcess();
};
void SandboxProcess::setupChildProcess()
{
    QString program = "/usr/local/bin/gpio";
    QStringList arguments;
    arguments << "export" << QString::number(4) << "out";
    start(program, arguments);
}

1 ответ

Похоже QProcess::setupChildProcess() не помогает, потому что его собственный процесс запускается после основного процесса приложения. Таким образом, основное приложение по-прежнему чувствует, что команда экспорта не была выполнена.

На данный момент я вижу два варианта:

  1. Сделать ManagerApp, который называют gpio (сделать экспорт), а затем позвонить (другой) MyApp который на самом деле будет иметь доступ к экспортируемым устройствам.
  2. Использовать gpio приложение напрямую и слушать их stdout с помощью signal/slot, с помощью QProcess,
Другие вопросы по тегам