Всем привет. Столкнулся с проблемой и что-то в голову ничего не приходит. Прошу совета. Ситуация следующая. Имеется ардуино мега с эзернет шилдом, которая как водится циклически выполняет некие операции. В определённый момент срабатывает условие таймера и начинается подпрограмма синхронизации времени с NTP сервером. Работает всё быстро, однако, если оборвать соединение с Интернетом, то команда начинающая отсылку пакета NTP серверу UDP.beginPacket(ip, port) замирает пока у неё в голове не сработает какой-то таймаут видимо. Длится это раздумье секунд 10 пока она не сообразит что связи нет. А мне нужно, чтобы основной цикл loop выполнялся быстрее. Когда есть связь всё летает. Но если связи нет начинается 10-секундный тупняк. Посоветуйте пожалуйста как быть.
Пробую такой вариант, но для того чтобы пингануть, нужно для начала определить IP по имени хоста. Попытка это сделать если соединение есть проходит быстро, но если опять же отсутствует соединение, то требуется около 2 секунд, чтобы контроллер понял, что определить IP не получится. Это конечно быстрее чем было, но всё равно 2-х секундная задержка в цикле loop (в то время как должны выполняться задания) это многовато. Мне бы хотя бы до 500-700 миллисекунд сократить.
Если кому интересно, подошёл вариант с использованием асинхронного пинга. В примере PingAsync к библиотеке ICMPPing (latest development version) можно послать пинг, и пока не получен результат пинга выполнять другие критичные операции.