Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: rust3128 от Октябрь 23, 2017, 11:25



Название: QProcess и ping
Отправлено: rust3128 от Октябрь 23, 2017, 11:25
Возникла необходимость отображать в форме вывод команды пинг.
Код:
void InfoObjectDialog::on_toolButtonPing_clicked()
{    if(ui->pingOutput->isHidden()) {
        ping = new QProcess(this);
        ping->setProcessChannelMode(QProcess::MergedChannels);
        connect( ping, SIGNAL(readyReadStandardOutput ()), this, SLOT(print_ping()) );
#ifdef Q_OS_WIN
     ping->start("ping", QStringList() << "-t" <<ip);
#else
     ping->start("ping", QStringList() << ip);
#endif
    } else {
        ping->kill();
    }
}
void InfoObjectDialog::print_ping()
{
    QByteArray      output;
    output = ping->readAllStandardOutput ();
    QTextCodec *codec = QTextCodec::codecForName("cp-866");
    QString fio = codec->toUnicode(output.data());
    fio.replace("\n","");
    qDebug() << "ping output" << fio;
    ui->pingOutput->appendPlainText(fio); //вывод в гуи
}
ping->kill(); Это понятно убивает процесс.
А хотелось бы послать  Ctrl+C. дабы получить статистику работы ping.
Может я не там Асистент читаю? :-)


Название: Re: QProcess и ping
Отправлено: qate от Октябрь 23, 2017, 12:55
QProcess::execute(QString("kill -SIGINT %1").arg(ping->pid()));


Название: Re: QProcess и ping
Отправлено: rust3128 от Октябрь 23, 2017, 13:29
Таки не там читал. Спасибо.


Название: Re: QProcess и ping
Отправлено: rust3128 от Октябрь 23, 2017, 20:07
В Linux все работает. В Windows при сборке

Код:
E:\Develop\HotlineDesktop\infoobjectdialog.cpp:261: ошибка: no matching function for call to 'arg(Q_PID)'
         QProcess::execute(QString("kill -SIGINT %1").arg(ping->pid()));
Завершаю так.
Код:
PROCESS_INFORMATION *pinfo = (PROCESS_INFORMATION  *)ping->pid();
QProcess::execute(QString("taskkill /PID %1 /F").arg(pinfo->dwProcessId));
Однако статистики PING не получаю :-(