Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Alex25 от 28-12-2020, 13:56:35

Название: Время простоя (не активности)
Отправлено: Alex25 от 28-12-2020, 13:56:35
Добрый день. Подскажите, лучший способ, как можно посчитать время, когда в окне Revit не происходит никаких действий. Через какое событие это лучше было бы делать (Idling,DocumentChanged )?
Название: Re: Время простоя (не активности)
Отправлено: Александр Игнатович от 28-12-2020, 14:25:54
Эффективные менеджеры подъехали?

Что считать неактивностью? Отсутствие изменений в модели? Или вообще каких-бы то ни было действий? Чел открывает разные модели, виды, но не вносит изменений - неактивность?

Как будешь считать, если 2 Revit-а открыто, в одном что-то делается, а во второй - так, посматривают иногда?
Название: Re: Время простоя (не активности)
Отправлено: Alex25 от 28-12-2020, 16:44:54
Стало интересно, как посчитать "простой".
Пока ищу в каком направление двигаться.
Неактивность  - когда мышка находится в Revit окне и не двигается. Если два Revit файла открыты,  то я собираю инфу по каждому файлу отдельно. Например,
- открываю файл - записал время
- синхронизировался - записал время.
За это время просчитать, когда мышка находилась в Revit и была неактивна, самое подходящее событие Idling.
Название: Re: Время простоя (не активности)
Отправлено: Александр Игнатович от 28-12-2020, 16:56:03
Так не трогать Revit, обойтись системными средствами. Idling - тебе будет или процессор кушать, если SetRaiseWithoutDelay вызовешь, или же, наоборот, вызываться с непонятными интервалами, плюс есть ещё режимы, в которых она не работает. Например, в режиме создания или редактирования некоторых объектов, в режиме редактирования групп (вроде бы).

Я бы посмотрел в сторону WinAPI, там есть, например, SetWinEventHook для отслеживания событий. Отдельной программкой в автозагрузке или вообще сервисом Windows.
Название: Re: Время простоя (не активности)
Отправлено: Alex25 от 28-12-2020, 17:19:34
Спасибо за информацию, а какой самый простой способ высчитать время "простоя"? Например, в Idling записать счетчик ++idling_time и выводить в конце
 TimeSpan idling_time = new TimeSpan(idling_counter).TotalSeconds;
Название: Re: Время простоя (не активности)
Отправлено: Александр Игнатович от 28-12-2020, 18:10:41
И что будет считать этот код?

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