7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
|
|
1 | |
Часто, при пинге сервера программа подвисает на 1-2 секунды и выдаёт значение пинга 022.04.2015, 14:08. Показов 2248. Ответов 14
Создал программу для проверки пинга. Часто, при пинге сервера программа подвисает на 1-2 секунды и выдаёт значение пинга 0. Есть ли какое-то исключение, которое можно заточить в try catch, что бы программа не зависала?
0
|
22.04.2015, 14:08 | |
Ответы с готовыми решениями:
14
При решении программа выдаёт значение функции, равное 0 или выдаёт ошибку. Что не так? Программа подвисает, но не выдаёт исключение Зависание программы при попытке пинга сервера Заменить один текстовый файл на другой при отсутствии пинга до сервера и вернуть все обратно при его появлении |
Администратор
|
|
22.04.2015, 14:27 | 2 |
OpenGoodwin, "зависание" программы говорит что ты делаешь ping в главном потоке приложения. Выполняй этот код в отдельном потоке и зависаний не будет. Ну и надо отметить что никакой try/catch здесь не поможет.
Что касается нулевого пинга, то нужно смотреть как ты его реализовал.
0
|
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
|
||||||
22.04.2015, 14:30 [ТС] | 3 | |||||
OwenGlendower, даю отрезок кода.
0
|
Администратор
|
|
22.04.2015, 14:40 | 4 |
Сообщение было отмечено OpenGoodwin как решение
Решение
OpenGoodwin, ты отправляешь ping только один раз. Похоже что иногда он не проходит и поэтому RoundtripTime равен 0. Тут возможны два решения - простое и правильное Простое - добавить проверку свойства Status. Если оно равно IPStatus.Success, то тогда можно выводить RoundtripTime, иначе ошибка. Правильное решение это отправлять ping несколько раз подряд чтобы накопить статистику. Тебе уже приводили пример для отправки нескольких ping-ов. Модифицируй его чтобы еще накапливалось среднее время ответа и ориентируйся на него.
1
|
2 / 2 / 1
Регистрация: 11.02.2015
Сообщений: 57
|
|||||||||||
22.04.2015, 14:52 | 5 | ||||||||||
Кто мешает сделать вот так:
Вывести это в отдельный метод pingtoserver, вызвать его в новом потоке:
0
|
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
|
||||||
22.04.2015, 15:30 [ТС] | 6 | |||||
OwenGlendower, спасибо Буду разбираться с тем кодом.
Добавлено через 35 минут dok221, Вы забыли указать, что нужно так же реализовывать систему Invoke. Ведь поток не может получить доступ к label из другого потока. Ну да ладно, я с этим помаялся. Сделал. Теперь другая проблема. При инвоке не выводится пинг:
0
|
Администратор
|
|||||||||||
22.04.2015, 15:35 | 7 | ||||||||||
Это равносильно коду:
0
|
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
|
|
22.04.2015, 15:39 [ТС] | 8 |
OwenGlendower, точно, спасибо.
0
|
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
|
|
22.04.2015, 15:54 [ТС] | 9 |
А что это за ошибка?
0
|
Администратор
|
|
22.04.2015, 16:27 | 10 |
OpenGoodwin, для работы Invoke() требуется чтобы элемент управления был создан и для окна работал цикл обработки сообщений. Ты очевидно вызываешь метод ru3 слишком "рано" - скорее всего из конструктора. Советую перенести его вызов в обработчик события Load формы.
P.S. Судя по тому что я вижу на скриншоте у тебя несколько функций ruN которые делают по сути одно и тоже. Советую переписать код так чтобы повторений было как можно меньше потому что длинные простыни кода состоящие из copy-paste тяжело поддерживать. Как пример посмотри на еще одно старое обсуждение.
0
|
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
|
||||||
22.04.2015, 16:34 [ТС] | 11 | |||||
OwenGlendower, я создал несколько методов(а точнее - 9). И вызывал поочерёдно их в потоках в обработчике нажатия на кнопку.
0
|
Администратор
|
|||||||||||
22.04.2015, 17:03 | 12 | ||||||||||
Сообщение было отмечено OpenGoodwin как решение
Решение
OpenGoodwin, это не оправдание для дублирования кода. Методу Thread.Start можно передать параметр который будет передан методу потока. С его помощью можно написать универсальный метод для всех ситуаций. Примерно так:
Поток
Вызов
1
|
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
|
|||||||||||
22.04.2015, 17:11 [ТС] | 13 | ||||||||||
OwenGlendower, хм, интересно реализовано. Только вот теперь другая проблема. Студия не распознаёт объект PingData. Жалуется на то, что не подключена директива, хотя она включена:
0
|
7 / 7 / 3
Регистрация: 15.01.2014
Сообщений: 459
|
|
22.04.2015, 17:20 [ТС] | 15 |
OwenGlendower, спасибо ОГРОМНОЕ за то, что помогаете. Добавил инвоки, всё заработало
0
|
22.04.2015, 17:20 | |
22.04.2015, 17:20 | |
Помогаю со студенческими работами здесь
15
Программа выдает значение 1989058103 при вводе 3 вместо 3 Программа при делении выдает целое значение а не дробное Программа выдает только одно значение при любых значениях xn и xk При любых значениях n программа выдает одно и то же (не верное) значение Подвисает мнемосхема на 2-3 секунды Winamp на секунды 3-4 подвисает Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |