powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Снять задачу (свое приложение)
11 сообщений из 11, страница 1 из 1
Снять задачу (свое приложение)
    #37322866
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программа работает с одной страничкой сайта, прослеживает изменения на сайте и уведомляет. Но по неизвесным причинам виснет. Работал через CreateObject("InternetExplorer.Application") но стало лучше работать на CreateObject("MSXML2.XMLHTTP"), хотя кажется никакой разницы. Компилированный проэкт запускаю через автозапуск, раз-два-три на день бывает виснет или четко работает. Добавил socket на проэкт и другой програмкой улавливаю пульс той програмки. Если пульса нет, как снять задачу ?
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37323025
Андрей159,
с помошью WMI
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37323062
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159, разница между объектами есть и не маленькая. Виснет из-за того, что скорее всего запрос выполняется синхронно. А во вторых, запрос может потеряться, а таймаут не используется
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37323394
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Андрей159

Попробуй сделать асинхронный запрос. Я на фокспро делал это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
This.Post_String = "https://....ua/...?stdate=" + Dtoc(dtAccStart) + "&endate=" + Dtoc(dtAccEnd) + 
"&PUREXML=true"

With This.XmlHttp
    .Open "POST", This.Post_String, True ' True отвечает за асинхронность запроса
    .SetRequestHeader "Host", "https://....ua"
    .SetRequestHeader "Content-type", "text/xml"
    .SetRequestHeader "Cache-Control", "no-store, no-cache"
    .SetRequestHeader "Pragma", "no-cache"
    .SetRequestHeader "User-agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.3) Gecko/20100401 
Firefox/3.6.3 ( .NET CLR 3.5.30729)"
    zapros = ""
' Собственно сам запрос
    .Send (Null)
Endwith
' Ожидаем ответа от веб-сервиса или окончания таймаута ожидания
IsSuccesful = True
Do While This.XmlHttp.readyState <>  4  And IsSuccesful
    DoEvents Force
'   Проверяем, если запрос длится больше минуты, прерываем его и сообщаем об ошибке
    If Abs(Minute(DateTime()) - Minute(dtSt)) >  2  Then
        IsSuccesful = False
    End If
Enddo
If !IsSuccesful Then
    zapros = "-1"
'       Messagebox("Сервис банка не отвечает длительное время. Данные не получены." + Chr(13)+Chr(10) + ;
'           "Попробуйте повторить операцию позднее", 0+48+4096, "Получение информации из банка", 5000)
Else
    zapros = This.XmlHttp.responseXML.XML
'   ddd = XMLHTTP.getResponseHeader("Last-Modified")
End If
Это кусочек из функции получения данных из банка
Dtoc - функция преобразует дату в строку следующего вида: "24.06.2011"

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37323564
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пробуй камнемАндрей159,
с помошью WMI

Приеду домой, поэксперементирую
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37323583
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to VSVLAD:
Согласен

to Игорь Горбонос
В прошлый раз я с этим так и не разобрался. Были ошибки... Делал сокетом, трудно, но получилось. Нужно было тестовый проэкт сохранить как функцию. Придется заново ковыряться. Socket хоть нигде не следит

Всем спасибо за помощь
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37324325
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонял в этом месте
DoEvents Force

DoEvents - понятно

а откуда Force. Это ключевое слово (которое мне неизвестно) или переменная (которая не описанна в даном примере) ?
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37324359
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это FoxPro, автор примера указал в сообщении.
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37324646
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Андрей159
> Непонял в этом месте
> DoEvents Force
> а откуда Force. Это ключевое слово (которое мне неизвестно) или переменная (которая не описанна в даном примере)
> ?


Сори недовычистил :( Это ключевое слово в FoxPro.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37325197
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой косяк. Уже с таким сталкивался и раньше.
У меня мало чем отличается XmlHttp использование. Просто у меня SetRecuestHeader не указан и передается по умолчанию свой (инспектировал в опере). Вот уже сутку работает нормально после добавление между DoEvents "разрешение" (у меня переменная Public DozvDaliPostData as Boolean)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Public Function GET_MSXML_HTTP(ByVal strURL As String) As String
    Dim oHttp As Object
    Dim z As Long
    
    On Error Resume Next
    Set oHttp = CreateObject("MSXML2.XMLHTTP")
    If Err.Number <>  0  Then
        Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
    End If
    On Error GoTo  0 
    If oHttp Is Nothing Then
        MsgBox "Не удалось инициализировать объект MSXML!"
        Exit Function
    End If
    On Error Resume Next
     ==>DozvDaliPostData = False
     oHttp.Open "GET", strURL, False
     oHttp.send
che:
     If oHttp.readyState <>  4  Or oHttp.Status <>  200  Then
       z = z +  1  ' >>>Счетчик попыток<<<
       Form1.Caption = z
       DoEvents
       If z >  20  Then
         Set oHttp = Nothing
         ==>DozvDaliPostData = True
        Exit Function
       End If
       GoTo che
     End If
     ==>DozvDaliPostData = True
     
    On Error GoTo  0 
    GET_MSXML_HTTP = oHttp.responseText
    Set oHttp = Nothing
End Function


Код: plaintext
1.
2.
3.
Private Sub Timer1_Timer() ' на 60 секунд
  ==>If DozvDaliPostData = False Then Exit Sub
    Call Command10_Click
end if


У меня получается DoEvents накапливал паралельные исполнения (много потоков) GET_MSXML_HTTP. Возможно из-за этого и висело. Когда сервер нормально отвечал - все было впорядке. Как только начинал опаздывать, так у меня и все висело неделю. (If z > 20 Then было z>100)
...
Рейтинг: 0 / 0
Снять задачу (свое приложение)
    #37325200
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой косяк. Уже с таким сталкивался и раньше.
У меня мало чем отличается XmlHttp использование. Просто у меня SetRecuestHeader не указан и передается по умолчанию свой (инспектировал в опере). Вот уже сутку работает нормально после добавление между DoEvents "разрешение" (у меня переменная Public DozvDaliPostData as Boolean)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Public Function GET_MSXML_HTTP(ByVal strURL As String) As String
    Dim oHttp As Object
    Dim z As Long
    
    On Error Resume Next
    Set oHttp = CreateObject("MSXML2.XMLHTTP")
    If Err.Number <>  0  Then
        Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
    End If
    On Error GoTo  0 
    If oHttp Is Nothing Then
        MsgBox "Не удалось инициализировать объект MSXML!"
        Exit Function
    End If
    On Error Resume Next
     DozvDaliPostData = False
     oHttp.Open "GET", strURL, False
     oHttp.send
che:
     If oHttp.readyState <>  4  Or oHttp.Status <>  200  Then
       z = z +  1  ' Счетчик попыток
       Form1.Caption = z
       DoEvents
       If z >  20  Then
         Set oHttp = Nothing
         DozvDaliPostData = True
        Exit Function
       End If
       GoTo che
     End If
     DozvDaliPostData = True
     
    On Error GoTo  0 
    GET_MSXML_HTTP = oHttp.responseText
    Set oHttp = Nothing
End Function


Код: plaintext
1.
2.
3.
Private Sub Timer1_Timer() ' на 60 секунд
  If DozvDaliPostData = False Then Exit Sub
    Call Command10_Click
end if


У меня получается DoEvents накапливал паралельные исполнения (много потоков) GET_MSXML_HTTP. Возможно из-за этого и висело. Когда сервер нормально отвечал - все было впорядке. Как только начинал опаздывать, так у меня и все висело неделю. (If z > 20 Then было z>100)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Снять задачу (свое приложение)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]