2013-06-25 2 views
0

Я пишу небольшое консольное приложение (пластина окна с использованием 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 в глобальной переменной каждый раз, когда он получал новую.

+0

Возможно, вы захотите прочитать второй ответ (Windows) по адресу http://stackoverflow.com/questions/6697292/pinging-from-a-c-c-program –

ответ

2

Если IcmpSendEcho кажется сложным, возможно, this source code может помочь, который вы измените для своих нужд.