Прошу перевести вызовы события ПриАктивизацииСтрокиТ9 в фоновый режим

tormozit Закрыто Высокий

Проблема
Сейчас события ПриАктивизацииСтрокиТ9 и ПриВыбореЗначенияТ9 вызываются Турбоконфом строго последовательно, что подтверждается следующим замером сделанным с пустыми обработчиками и добавлением в обработчик ПриАктивизацииСтрокиТ9 ТурбоКонф.Ждать(2000) RDT.os

В этом тесте я вызвал подсказку Т9, затем быстро нажал 3 раза клавишу "Вниз" и затем ENTER, после чего 7 секунд происходило ничего и затем вставилось слово.

Из-за этого при выборе строки списка Т9 происходит сначала ожидание завершения выполнения всех обработчиков ПриАктивизацииСтрокиТ9, а их обычно запускается как минимум несколько. Это нередко приводит к значительной задержке от нажатия ENTER и до начала обработки события ПриВыбореЗначенияТ9.

Решение
Прошу сделать запуск всех обработчиков ПриАктивизацииСтрокиТ9 в отдельном потоке, чтобы вызов события ПриВыбореЗначенияТ9 происходил без ожидания их завершения.

Также отмечу что в случае ИР адаптера при многопоточной работе скрипта еще есть проблема ожидания в коде скрипта в очереди вызовов однопоточного COM-сервера приложения ИР, которую я буду решать отдельно.

Комментарии

tormozit
#1, ред. 13 июля 2025 13:02

И желательно сделать, чтобы перед вызовом ПриВыбореЗначенияТ9 в потоке выполнения обработчиков ПриАктивизацииСтрокиТ9 очищалась очередь. А выполняющийся в текущий момент обработчик ПриАктивизацииСтрокиТ9 я завершу кодом скрипта и могу вернуть через параметр обработчика признак прерывания, если нужно.
tormozit изменил статус на Открыто


bolsun
#2, ред. 16 июля 2025 13:43

ПриАктивизацииСтроки - и так выполняется в отдельном потоке иначе зависал бы интерфейс ТурбоКонф, пока не выполнится обработчик.
Я специально выстраиваю события в очередь, чтобы не возникало побочных эффектов при одновременном вызове (например несколько одновременных обращений к COM).

Я могу убрать выстраивание в очередь через lock(), тогда тебе придется самому обрабатывать и отслеживать одновременное обращение к COM.

Отменить текущие выполняющиеся задачи могу, но это не гарантирует, что будут отменены все задачи, т.к. теоретически некоторые могут добавиться позже события выбора значения.


bolsun
#3, 16 июля 2025 13:50

6.4.9328.28227
https://disk.yandex.ru/d/XRPUNWQtrbwBUw

  • В подсказке T9 убрано выстраивание в очередь обработчиков ПриАктивизацииСтроки. Это могло приводить к значительной задержке вставки значения из подсказки. Разработчику скрипта теперь необходимо самому контролировать одновременное обращение к однопоточным объектам.
  • При выборе значения подсказки T9 отменяются текущие выполняющиеся фоновые обработчики ПриАктивизацииСтроки.


tormozit
#4, ред. 16 июля 2025 17:50

(2) bolsun, думаю lock(), т.е. выстраивание в очередь, было бы достаточно убрать у всех обработчиков кроме ПриАктивизацииСтроки. Как я понял, у обработчика ПриВыбореЗначения тоже вызывался lock().


bolsun
#5, 16 июля 2025 18:02

6.4.9328.35463
Версия без отмены текущих фоновых задач.
https://disk.yandex.ru/d/BVoyhXygX844sg


bolsun
#6, ред. 16 июля 2025 23:31

Тема задвоилась.
Здесь обсуждение побочек Конструктор не найден (ТурбоКонф) https://turboconf.ru/Tasks/10374


bolsun
#7, ред. 17 июля 2025 12:08

6.4.9329.25199

  • При открытии окна подсказки создается файл t9.lck в папке данных программы. Наличие файла означает, что подсказка открыта в данный момент. При закрытии окна подсказки (выбором значения или отменой) файл удаляется и рекомендуется прервать в скрипте выполнение текущего обработчика ПриАктивизацииСтрокиТ9.
    Получить путь к директории с данными можно через API ТурбоКонф.ПолучитьЗначениеНастройки("DataPath")

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


bolsun
#8, 17 июля 2025 12:21

6.4.9329.25696


tormozit
#9, ред. 17 июля 2025 12:36

(7) bolsun, этот файл не решает задачу. Флаг должен меняться в первую очередь в случае - непосредственно при выборе элемента списка, т.е. до закрытия окна и до вызова обработчика ПриВыбореЗначения. Тогда я смогу ускорить освобождение очереди вызовов к COM.


bolsun
#10, ред. 17 июля 2025 12:51

(9) tormozit, он и удаляется перед вызовом обработчика при вставке, а также при закрытии окна отменой.


tormozit
#11, 17 июля 2025 19:08

(10) bolsun, проверил. Да, файл удаляется в правильный момент. Вроде бы заработало как надо. Тестирую.


tormozit
#12, ред. 19 июля 2025 07:38

Новый функционал работает корректно и быстро. За день работы я не заметил долгих вставок из списка Т9. Они всегда были быстрыми. Досрочное завершение обработчиков ПриАктивизацииСтроки также зарегистрировано. Задача решена.
tormozit изменил статус на Закрыто


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера