Я пишу небольшое консольное приложение (пластина окна с использованием visual studio 2012), которые показывают текущий пинг на IP и некоторые другие статистики. (В среднем за последние 100pings, потери пакетов и т.д. ...) Вот моя фактическая реализация:Получить время ping из системной команды в C++ (ping x.x.x.x -n)
char buffer[100];
FILE *fp = _popen("ping -l 1 -n 1 61.5.222.121" , "r");
for (i=0;i<8;i++) {
fgets(buffer,100,fp);
}
_pclose(fp)
Я называю эту функцию в моей основной с:
_beginthread(ping, 0, NULL);
Тогда я достаю пинг из буфера с strstr и sscanf_s. Но когда я запускаю программу, я вижу в диспетчере процессов, что ping.exe и cmd.exe продолжают открывать/закрывать, что нормально, потому что при каждом всплытии он запускает один.
Я ищу способ получить более чистый способ извлечения значения времени пинга. Например, что-то, что может читать результат каждый раз, когда создается новая строка в папке (с командой «ping google.com -t»), таким образом, будет только один процесс ping.exe и cmd.exe, который сделает все работа и время обновления пинга будут намного быстрее.
Я изучил команду IcmpSendEcho, но для меня это выглядит очень сложно. В основном я хочу, чтобы простая функция выполнялась в фоновом режиме и записывала время отклика ping в глобальной переменной каждый раз, когда он получал новую.
Возможно, вы захотите прочитать второй ответ (Windows) по адресу http://stackoverflow.com/questions/6697292/pinging-from-a-c-c-program –