Показать сообщение отдельно
Старый 28.10.2009, 20:18   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А не связано ли нестабильное поведение счётчика простоя с наличием, а точнее с отсутствием в нужных местах команд StartLengthyOperation и endLengthyOperation?
Нет, эти методы всего лишь меняют в клиенте курсор с обычного на песочные часики и обратно.
Цитата:
Сообщение от ice Посмотреть сообщение
есть подозрение, что сброс счетчика как то связан с обновлением прогрессбара
  • Время неактивности считается от последнего обмена данными между клиентом и сервером
  • Настройка выхода по таймауту неактивности обрабатывается клиентом в период простоя - грубо говоря, когда стек вызова кода X++ пуст
  • Даже если запустить какую-то длительную операцию на сервере, исходно эта операция стартует на клиент (самые нижние фреймы в стеке вызова), поэтому клиент будет ждать завершения этой операции
Отсюда получаем несколько выводов:
  1. Любой обмен данными между клиентом и сервером приводит к сбросу счетчика времени простоя - в т.ч. обновление градусников при работе кода на сервере, поскольку для обновления данные градусника передаются на клиента
  2. Пока выполняется какой-либо код X++, клиент не будет обрабатывать настройку выхода по таймауту неактивности, в частности, если вы настроили таймаут простоя в 1 минуту, а на сервере полчаса формируется отчет, или обновляются данные, или тупо крутится пустой цикл, и при этом не отображаются никакие градусники, клиент все равно не отвалится по таймауту неактиавности, пока этот код не отработает, не вернет управление на клиента, не отработает клиентская часть кода, и стек вызова не станет пуст - только после этого клиент обработает настройку и отвалится по таймауту неактивности
К слову, даже если вообще не выполняется (вроде бы) никакой код, т.е. клиент реально простаивает, счетчик неактивности все равно периодически сбрасывается. Это связано с тем, что метод Info.watchDog() каждые 15 минут обновляет информацию о времени завершения сессии пользователя, косвенно вызывая обмен данными клиента с сервером (экземпляр Info "живет" на клиенте, а с БД при использовании тонкого клиента работает сервер).
Это все подробно обсуждалось в теме Автоматический выход из системы. Обратите также внимание на обсуждаемый в той теме косяк в работе автозавершения, проявляющийся при создании новой записи.
За это сообщение автора поблагодарили: lev (1), Ivanhoe (1), ice (1), S.Kuskov (1), -=RSV=- (1), Player1 (1), jeky (1), Alexx7 (1).