Турбоконф блокирует ввод на 10 секунд при обращении к буферу обмена в остановке отладки

tormozit Открыто Высокий

Нажимаю CTRL+C в отлаживаемом клиентском приложении 1С. При этом срабатывает код 1С и внутри него точка останова. В конфигураторе сразу вызываю команду скрипта "Вычислить выражение". Турбоконф в этот момент подвисает на 10 секунд.
За сегодня это уже >5 случалось.
[18.12.25 13:17:45:554] SetClipboard() with id 639016606655541725 has started...
[18.12.25 13:17:55:785] SetClipboard() with id 639016606655541725 has finished...

Ссылка скрыта

Комментарии

tormozit
#1, ред. 18 декабря 2025 17:52

Снова прошу реализовать максимум 2-х секундное ожидание ответа буфера. Видимо еще не везде или не при всех условиях это обеспечивается.


tormozit
#2, ред. 20 декабря 2025 16:33

Потестировал этот сценарий побольше. Зависает стабильно.
Нужно установить точку останова в первую инструкцию ирКлиент.БуферОбмена_КопироватьЛкс.
В любом табличном поле клиентского приложения ИР выделить несколько строк и нажать CTRL+C.
Сработает точка останова. Сразу вызвать команду адаптера, например "Копировать ссылку".
Турбоконф блокирует ввод на 10 секунд с отображением уведомлений о блокировке.


bolsun
#3, ред. 21 декабря 2025 21:08

Это проблемы в платформе, воспроизводится даже без запущенного ТурбоКонф.
Выделить несколько строк в клиенте, конфигуратор остановится на точке останова и затем сразу же скопировать что-то в буфер, вызовет подвисание и блокировку буфера. Даже если скопировать в другом приложении, например VS Code зависает и блокируется на 10 секунд.


bolsun
#4, ред. 21 декабря 2025 21:32

(3) bolsun, возможно эту проблему платформы усугубляет реализация перехвата Ctrl+C в ИР (вижу какие-то хуки повешаны, внешняя компонента??), возможно платформе нужно какое-то время на то, чтобы освободить буфер перед точкой останова, но в любом случае это не имеет отношения к ТурбоКонф.


tormozit
#5, ред. 21 декабря 2025 21:32

(3) bolsun, Да, я уже приводил описание механизма этой блокировки. Я лишь напоминаю, что по задумке обращение к буферу в отдельном потоке не должно надолго подвешивать работу Турбоконфа.
Вот пример на .Net Framework 4.8 от ИИ того, что я имею ввиду
Ссылка скрыта

Ключевые особенности:

  1. Универсальность: Не требует знания конкретных форматов
    
  2. Двойная стратегия:
      Быстрая проверка доступности (50-100мс)
      Основное чтение с таймаутом (до 2000мс)
    
  3. Изоляция блокировок: Все потенциально блокирующие операции в отдельных потоках
    
  4. STA-aware: Учитывает требования COM к апартаментам потоков
    
  5. Отказоустойчивость: При таймауте основной поток продолжает работу
    
  6. Экспоненциальная задержка: При временных ошибках (CLIPBRD_E_CANT_OPEN)
    

Принцип работы:

  1. Быстрая проверка пытается просто открыть/закрыть буфер обмена
    
  2. Если проверка зависает - считаем что есть блокирующие форматы
    
  3. Основное чтение запускается в отдельном потоке с таймаутом
    
  4. При таймауте поток остается работать в фоне, приложение продолжает работу
    


bolsun
#6, ред. 21 декабря 2025 21:34

(5) tormozit, при чем тут уже буфер, платформа вешается. ТК. кстати не подвисает, а даже снимает блокировку при кликах.


tormozit
#7, ред. 21 декабря 2025 21:37

(6) bolsun, Тогда осталось сделать чтобы эта блокировка сама снималась через 2 секунды с выбросом исключения и появлялись кнопки адаптера и т.д.


bolsun
#8, 21 декабря 2025 21:37

(7) tormozit, а толку от них? Если конфигуратор намертво зависает.
может попробовать улучшить перехват в ИР? Почему это вызывает зависание конфигуратора и других приложений на 10 секунд?


tormozit
#9, ред. 21 декабря 2025 21:40

(8) bolsun, Конфигуратор вроде бы не зависает. Почему ты так решил?


bolsun
#10, ред. 21 декабря 2025 21:40

(9) tormozit, а это что? все это время я кликаю


bolsun
#11, ред. 21 декабря 2025 21:42

(10) я же конкретно написал, что зависает конфигуратор и другие приложения (VS Code), без запущенного ТурбоКонф.


tormozit
#12, 21 декабря 2025 21:44

(10) bolsun, в логе я вижу что Турбоконф зовет SetClipboard() (установку значения в буфер обмена) и ждет 10 секунд. Как тут участвует конфигуратор?


bolsun
#13, 21 декабря 2025 21:45

(12) tormozit, буфер заблокирован, любые обращения к нему вызывают зависания приложения которое обращается к буферу, включая сам конфигуратор.


tormozit
#14, 21 декабря 2025 21:46

(13) bolsun, Но где в логе к буферу обращается конфигуратор и ждет 10 секунд? Мне кажется это делает код Турбоконфа.


tormozit
#15, 21 декабря 2025 21:48

Если бы я в конфигураторе нажал "Вставить из буфера", тогда бы зависание было независимым от Турбоконфа. Но в логе такого нет.


bolsun
#16, 21 декабря 2025 21:50

Мне больше нечего добавить, вроде все уже описал.


tormozit
#17, ред. 21 декабря 2025 23:12

Формулирую более четко свое пожелание. В логе видна установка содержимого буфера обмена Турбоконфом с 10 секундным ожиданием на блокировке. Это поведение стабильно воспроизводится.
[18.12.25 13:17:45:554] SetClipboard() with id 639016606655541725 has started...
[18.12.25 13:17:55:785] SetClipboard() with id 639016606655541725 has finished...
Я прошу сократить максимальную длительность такого ожидания до 2-х секунд (или параметризовать эту длительность).
Сейчас разблокировка ввода (после 3-го клика) дает доступ к окну конфигуратора, но не к Турбоконфу, который продолжает ждать до конца.


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