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

В этом тесте я вызвал подсказку Т9, затем быстро нажал 3 раза клавишу "Вниз" и затем ENTER, после чего 7 секунд происходило ничего и затем вставилось слово.
Из-за этого при выборе строки списка Т9 происходит сначала ожидание завершения выполнения всех обработчиков ПриАктивизацииСтрокиТ9, а их обычно запускается как минимум несколько. Это нередко приводит к значительной задержке от нажатия ENTER и до начала обработки события ПриВыбореЗначенияТ9.
Решение
Прошу сделать запуск всех обработчиков ПриАктивизацииСтрокиТ9 в отдельном потоке, чтобы вызов события ПриВыбореЗначенияТ9 происходил без ожидания их завершения.
Также отмечу что в случае ИР адаптера при многопоточной работе скрипта еще есть проблема ожидания в коде скрипта в очереди вызовов однопоточного COM-сервера приложения ИР, которую я буду решать отдельно.
#1, ред. 13 июля 2025 13:02
И желательно сделать, чтобы перед вызовом ПриВыбореЗначенияТ9 в потоке выполнения обработчиков ПриАктивизацииСтрокиТ9 очищалась очередь. А выполняющийся в текущий момент обработчик ПриАктивизацииСтрокиТ9 я завершу кодом скрипта и могу вернуть через параметр обработчика признак прерывания, если нужно.
tormozit изменил статус на Открыто
#2, ред. 16 июля 2025 13:43
ПриАктивизацииСтроки - и так выполняется в отдельном потоке иначе зависал бы интерфейс ТурбоКонф, пока не выполнится обработчик.
Я специально выстраиваю события в очередь, чтобы не возникало побочных эффектов при одновременном вызове (например несколько одновременных обращений к COM).
Я могу убрать выстраивание в очередь через lock(), тогда тебе придется самому обрабатывать и отслеживать одновременное обращение к COM.
Отменить текущие выполняющиеся задачи могу, но это не гарантирует, что будут отменены все задачи, т.к. теоретически некоторые могут добавиться позже события выбора значения.
#3, 16 июля 2025 13:50
6.4.9328.28227
https://disk.yandex.ru/d/XRPUNWQtrbwBUw
#4, ред. 16 июля 2025 17:50
(2) bolsun, думаю lock(), т.е. выстраивание в очередь, было бы достаточно убрать у всех обработчиков кроме ПриАктивизацииСтроки. Как я понял, у обработчика ПриВыбореЗначения тоже вызывался lock().
#5, 16 июля 2025 18:02
6.4.9328.35463
Версия без отмены текущих фоновых задач.
https://disk.yandex.ru/d/BVoyhXygX844sg
#6, ред. 16 июля 2025 23:31
Тема задвоилась.
Здесь обсуждение побочек Конструктор не найден (ТурбоКонф) https://turboconf.ru/Tasks/10374
#7, ред. 17 июля 2025 12:08
6.4.9329.25199
Получить путь к директории с данными можно через API ТурбоКонф.ПолучитьЗначениеНастройки("DataPath")
https://disk.yandex.ru/d/XRPUNWQtrbwBUw
#8, 17 июля 2025 12:21
6.4.9329.25696
https://disk.yandex.ru/d/XRPUNWQtrbwBUw
#9, ред. 17 июля 2025 12:36
(7) bolsun, этот файл не решает задачу. Флаг должен меняться в первую очередь в случае - непосредственно при выборе элемента списка, т.е. до закрытия окна и до вызова обработчика ПриВыбореЗначения. Тогда я смогу ускорить освобождение очереди вызовов к COM.
#10, ред. 17 июля 2025 12:51
(9) tormozit, он и удаляется перед вызовом обработчика при вставке, а также при закрытии окна отменой.
#11, 17 июля 2025 19:08
(10) bolsun, проверил. Да, файл удаляется в правильный момент. Вроде бы заработало как надо. Тестирую.
#12, ред. 19 июля 2025 07:38
Новый функционал работает корректно и быстро. За день работы я не заметил долгих вставок из списка Т9. Они всегда были быстрыми. Досрочное завершение обработчиков ПриАктивизацииСтроки также зарегистрировано. Задача решена.
tormozit изменил статус на Закрыто