@River0051

Почему переменная иногда пуста?

Здравствуйте, подскажите пожалуйста, есть скрипт для autoit который проверяет каждые 30 секунд, что программа соединена по сети, все работает отлично, но иногда в рандамное время, это может быть 5 минут, а может быть несколько часов или несколько минут, переменная $str оказывается пустой, как будто программа перестала быть соединена по сети и происходит перезапуск программы, но на самом деле программа не теряет соединение и продолжает работать, как можно исправить такой баг и в чем может быть проблема ?

Func timer()
   Sleep(30000) ; 30 sec
   qry()
EndFunc
Local $str = ''
    Local $pid = Run(@ComSpec & " /c " & 'netstat -a -n | findstr ":80"', '', @SW_HIDE, 2)
    While ProcessExists($pid)
        $str &= StdoutRead($pid)
    WEnd
    if $str Then
        _DebugOut (_NowTime() & ": Процесс активен")
    timer()
    Else
    _DebugOut (_NowTime() & ": Процесс не активен")
    Start()
    EndIf
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Поиск findstr ":80" в netstat означает, что ищется инфо, что некая программа открыла коннект или с порта 80, или на порт 80. А это может быть и браузер, и какая-нибудь запущенная программа, и даже автообновление Windows. Какое-то слишком общее правило у вас получилось.

Кроме того, коннект у вашей программы не может быть вечным, коннекты имеют свойство прерываться, по техническим причинам. И всё зависит от того, как быстро программа восстанавливает коннект, если она его вообще восстанавливает. Если скрипт попадет в момент, когда коннект не восстановлен - тогда и будет пустой результат. Самое простое - делать повторную проверку через например 10 секунд, и если коннекта всё равно нет - тогда и делать (пере)запуск.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы