Topic: Параллельный процесс/поток в MVDB

Добрый день, форумчане.
Делаю программу сбора данных с удалённых устройств (ККТ), устройств более 30 шт., периодически по очереди подключаюсь к устройствам и считываю данные. Во время подключения и передачи данных (доли секунды) программа не отвечает на запросы, курсор со стрелки меняется на крутящийся круг.
Подскажите, есть ли в MVDB возможность выделить часть кода скрипта в отдельный процесс/поток, чтобы процесс опроса устройств не мешал работе пользователя в программе? Или может есть другой способ решить эту задачу?

Re: Параллельный процесс/поток в MVDB

newusr wrote:

Добрый день, форумчане.
Делаю программу сбора данных с удалённых устройств (ККТ), устройств более 30 шт., периодически по очереди подключаюсь к устройствам и считываю данные. Во время подключения и передачи данных (доли секунды) программа не отвечает на запросы, курсор со стрелки меняется на крутящийся круг.
Подскажите, есть ли в MVDB возможность выделить часть кода скрипта в отдельный процесс/поток, чтобы процесс опроса устройств не мешал работе пользователя в программе? Или может есть другой способ решить эту задачу?

MVD не поддерживает многопоточность, но Вы можете использовать Application.ProcessMessages();

Re: Параллельный процесс/поток в MVDB

pavlenko.vladimir.v wrote:

MVD не поддерживает многопоточность, но Вы можете использовать Application.ProcessMessages();

Может я неправильно использую эту функцию, в каком месте кода она должна быть?

Re: Параллельный процесс/поток в MVDB

newusr wrote:

Может я неправильно использую эту функцию, в каком месте кода она должна быть?

посмотрите тут http://myvisualdatabase.com/forum/viewtopic.php?id=8623

Re: Параллельный процесс/поток в MVDB

newusr wrote:

периодически по очереди подключаюсь к устройствам и считываю данные

Каким способом?

Re: Параллельный процесс/поток в MVDB

vovka3003 wrote:

Каким способом?

Подключаю драйвер ККМ как OLE объект, подключаюсь, запрашиваю данные, пока по кнопке, потом буду по таймеру:

procedure [name] (Sender: TObject; var Cancel: boolean);
var
  kkm: Variant;
begin
  if VarType(kkm) = varNull then kkm:=CreateOleObject('Addin.DrvFR');
  if kkm.Connect = 0 then
      begin
        
        запросы данных...

    kkm.Disconnect;
      end else showmessage('Не удалось подключиться к ККМ: '+kkm.ResultCodeDescription);
end;

7 (edited by vovka3003 2023-08-07 07:32:24)

Re: Параллельный процесс/поток в MVDB

newusr wrote:

..драйвер ККМ как OLE объект, подключаюсь, запрашиваю данные

Тогда вам не поможет Application.ProcessMessages.
Как вариант "асинхронности" - вызывать отдельный процесс (exe-шник), в котором написать функцию сбора и возврат в текстовый файл или через SendMessage в указанное поле.

Re: Параллельный процесс/поток в MVDB

vovka3003 wrote:

Как вариант "асинхронности" - вызывать отдельный процесс (exe-шник),..

Я в общем-то к этому и пришёл, но на всякий случай решил спросить, вдруг всё-таки был вариант.

Re: Параллельный процесс/поток в MVDB

newusr wrote:

Я в общем-то к этому и пришёл, но на всякий случай решил спросить, вдруг всё-таки был вариант.

Только если пропатчить DrvFR.dll smile

Re: Параллельный процесс/поток в MVDB

vovka3003 wrote:

Только если пропатчить DrvFR.dll smile

Можно подробней, как пропатчить и как пользоваться патченым dll?

Re: Параллельный процесс/поток в MVDB

newusr wrote:

Можно подробней, как пропатчить и как пользоваться патченым dll?

Это была шутка ака "пропатчить KDE2 под FreeBSD"))