Время простоя (не активности)

Автор Тема: Время простоя (не активности)  (Прочитано 4538 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Alex25Автор темы

  • ADN OPEN
  • Сообщений: 45
  • Карма: 0
Добрый день. Подскажите, лучший способ, как можно посчитать время, когда в окне Revit не происходит никаких действий. Через какое событие это лучше было бы делать (Idling,DocumentChanged )?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Время простоя (не активности)
« Ответ #1 : 28-12-2020, 14:25:54 »
Эффективные менеджеры подъехали?

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

Как будешь считать, если 2 Revit-а открыто, в одном что-то делается, а во второй - так, посматривают иногда?

Оффлайн Alex25Автор темы

  • ADN OPEN
  • Сообщений: 45
  • Карма: 0
Re: Время простоя (не активности)
« Ответ #2 : 28-12-2020, 16:44:54 »
Стало интересно, как посчитать "простой".
Пока ищу в каком направление двигаться.
Неактивность  - когда мышка находится в Revit окне и не двигается. Если два Revit файла открыты,  то я собираю инфу по каждому файлу отдельно. Например,
- открываю файл - записал время
- синхронизировался - записал время.
За это время просчитать, когда мышка находилась в Revit и была неактивна, самое подходящее событие Idling.

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Время простоя (не активности)
« Ответ #3 : 28-12-2020, 16:56:03 »
Так не трогать Revit, обойтись системными средствами. Idling - тебе будет или процессор кушать, если SetRaiseWithoutDelay вызовешь, или же, наоборот, вызываться с непонятными интервалами, плюс есть ещё режимы, в которых она не работает. Например, в режиме создания или редактирования некоторых объектов, в режиме редактирования групп (вроде бы).

Я бы посмотрел в сторону WinAPI, там есть, например, SetWinEventHook для отслеживания событий. Отдельной программкой в автозагрузке или вообще сервисом Windows.

Оффлайн Alex25Автор темы

  • ADN OPEN
  • Сообщений: 45
  • Карма: 0
Re: Время простоя (не активности)
« Ответ #4 : 28-12-2020, 17:19:34 »
Спасибо за информацию, а какой самый простой способ высчитать время "простоя"? Например, в Idling записать счетчик ++idling_time и выводить в конце
 TimeSpan idling_time = new TimeSpan(idling_counter).TotalSeconds;

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Время простоя (не активности)
« Ответ #5 : 28-12-2020, 18:10:41 »
И что будет считать этот код?

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