powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Насколько критично долбить по таймеру функцией SendMessage?
3 сообщений из 3, страница 1 из 1
Насколько критично долбить по таймеру функцией SendMessage?
    #37922427
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, т.е. разобрался я SendMessage/GetMessage с opal.dll
Теперь могу контролировать ее из VB6 непосредственно, это хорошо.

Но возник вопрос.
Есть некий процесс, выполняемый внутри dll.
Он описывается структурой из ряда параметров, его суть характерезующих. {m_param1,m_param2, ...mparamN}
=========================
Не умея нормально работать через Dll, я отслеживал основные фазы процесса PhaseA, PhaseB, PhaseC, в C++ коде генерировал файлы, а в VB6 их ловил:
Код: plaintext
1.
2.
3.
  ofstream log_file("ID.phB");
  log_file << "param1=" << m_param1 << "\n";
  log_file << "param2=" << m_param2 << "\n";


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub TimerLog_Timer()
    'if log phB exist
    Do
        logfile = Dir(AppDirectory & "log\*.phB")
        If Len(logfile) > 0 Then
            TimerLog.Enabled = False
            <Процедура обработки, т.е. чтение текстовухи, ее парсинг, и т.д., удаление ее>
        Else
            Exit Do
        End If
    Loop
    'if log phD exist
    Do
        logfile = Dir(AppDirectory & "log\*.phD")
        If Len(logfile) > 0 Then
...


Естественно файлы генерировались только в критические моменты (при изменениях описывающих процесс параметров)
===========================
Обладая "новой технологией" я могу сделать так:

Код: vbnet
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.
Private Sub TimerStat_Timer()
    Dim NewMes As OpalMessageStat
    Dim BackMesPtr As Long
    Dim MesType As OpalMessageType
    NewMes.m_type = OpalCmdGetStat
    NewMes.m_param.m_callToken = VarPtr(StringToMas(TextCallToken.Text).ByteStr(0))
    BackMesPtr = OpalSendMessage_GetStat(L, NewMes)
    TextBoxAdd TextSendMes, "CmdGetStat: BackMesPtr=" & BackMesPtr
    If BackMesPtr = 0 Then Exit Sub
    CopyMemory MesType, ByVal BackMesPtr, 4
    If MesType = OpalIndCommandError Then
        Dim s_CommandError As Long
        CopyMemory s_CommandError, ByVal BackMesPtr + 4, 4
        TextBoxAdd TextSendMes, "Error: " & PtrToString(s_CommandError)
    ElseIf MesType = OpalCmdGetStat Then
        Dim s_Stat As OpalStat
        CopyMemory ByVal VarPtr(s_Stat), ByVal BackMesPtr + 4, LenB(s_Stat)
        With s_Stat
          TextStat.Text = "m_callToken=" & PtrToString(.m_callToken) & vbCrLf & _
            "m_param1=" & .m_stat.m_param1 & vbCrLf & _
            "m_param2=" & Chr(.m_stat.m_param2) & vbCrLf & _
...
            "m_errorText=" & PtrToString(.m_stat.m_errorText)
        End With
    End If
End Sub


С одной стороны, я могу получать более точную статистику легкой ценой.
С другой стороны, я теперь не знаю, в какие ключевые моменты статистика меняется (те моменты когда я генерировал файлы, потому как теперь m_параметры меняются внутри dll).
Т.е. если я например хочу отслеживать как и раньше только ключевые моменты...
Самый простой способ приведенный выше: по таймеру долбим SendMessage и получаем в ответ указатель на структуру с тек. параметрами.
По хорошему нужны всякие CallBack внутри Opal на интересующую меня тему, но их нет, а писать самому ...C++... я не уверен.
Тем более там параметры возвращаются из плагина - другая dll.

Т.е. мой вопрос: насколько безобидно посылать SendMessage и обрабатывать результат каждые напр. 0,5 сек .
А если процессов не 1, а штук 50-100 параллельных?
И намного ли это лучше кидания файлов?

С другой стороны непрерывный опрос м.б. даже лучше, т.к. позволит получить индикатор процесса (имеется в виду доступ к более тонким параметрам, кот. меняются непрерывно с отображением ProgressBar например). Вопрос насколько это НЕ ГРУЗИТ?
...
Рейтинг: 0 / 0
Насколько критично долбить по таймеру функцией SendMessage?
    #37923454
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такой сложный вопрос задал?
...
Рейтинг: 0 / 0
Насколько критично долбить по таймеру функцией SendMessage?
    #37925252
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, разработчик Opal считает что это в порядке вещей.

Developer"Normal" depends on who you ask. :-)

For something like statistics, I prefer a pull model (timer and call something to get info) to a push model (system calls you back with info) due to all sorts of complicated reasons to do with application writers and possible deadlocks.

Use one timer, and thread, for all calls.

And if you are using any PC manufactured in the last couple of years, you really have to do a LOT to slow it down. Some low power embedded ARM thing might have a problem, but generally anything desktop or rack mount is incredibly fast, and something like this should not cause an issue.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Насколько критично долбить по таймеру функцией SendMessage?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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