|
idle
|
|||
---|---|---|---|
#18+
Нужно сделать какие-то действия, если юзер не работал 30 минут. После этого, если он не работал час // idle(3600) - закрыть прогу. Но если после 30 минут юзер вернулся к проге, то нужно сбросить снова на 30 минут // idle(1800). Как такое сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 12:02 |
|
idle
|
|||
---|---|---|---|
#18+
Где? В БД, в программе? Точнее надо изложить проблему ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 13:13 |
|
idle
|
|||
---|---|---|---|
#18+
spas2001, В программе. Объясняю: клиент открыл окно, поставил курсор в поле и написал буковку "А". Сидит, ковыряется в носу. Через полчаса нужно сохранить эту буковку в файлик и засечь час. Если клиент не вернется к работе, то его нужно выплюнуть из проги. Если он через 40 минут нажмет на буковку "Б", то нужно вновь засечь полчаса и т.д. Я думаю, что такое нельзя реализовать. Очень надеюсь, что ошибаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 13:28 |
|
idle
|
|||
---|---|---|---|
#18+
Такое сделать возможно. По моему, в хелпе на ф-цию idle() все доходчиво написано ... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 13:34 |
|
idle
|
|||
---|---|---|---|
#18+
Riska... Я думаю, что такое нельзя реализовать. Очень надеюсь, что ошибаюсь.ИМХО, реализовать то можно... И, как правильно сказано выше, PaulJB... в хелпе на ф-цию idle() все доходчиво написано ... Хуже того, можно это и без idle() сделать. Извращение еще то, но нет ничего невозможного. Ибо, как гласит бородатый девиз - "не бывает нерешаемых задач, бывают не подписанные бюджеты". Я бы прикидывал примерно так. Во первых - во всем приложении ни одного "чистого" объекта, с которым может контактировать пользователь, все - юзеробжекты унаследованные от нужных контролов. Ну, за исключением лейблов и групбоксов, пожалуй, с картинками. Хотя - тоже не факт. Во вторых - во всех контролах-юзеробжектах на любой "чих" пользователя - клик, нажатие кнопки, (а где-то, может быть даже, моусмув и скролл) и т.п. - вызов некоего объекта, реализующего необходимый таймер + ссылка на объект (контрол) его вызвавший + функция, реализующая запись буковок в файл и прочая, с конкретикой под, собственно, сам контролл Ну и в третьих - большой глобальный nvo который создается на старте приложения и на каждый его "пинок" от контролла сбрасывает таймер на ноль и начинает считать снова, а по достижению порогового времени (имея ссылку на "пнувший" его контролл) в обратку "пинает" контролл и вызывает его функцию (см. во вторых). После чего запускает второй таймер по достижению которого стопает приложение. В общем как то так... Т.е. если закладывать такое на этапе проектирования приложения - еще ничего, можно побаловаться, а вот если такое встраивать в приложение имеющееся - тушите свет и готовьте бабки для фактического переписывания приложения с нуля... Кстати, думаю, и при использовании idle() кое-что из вышесказанного тоже сделать придется... Все вышесказанное - чистейшее ИМХО и продукт задурманенного антиаллергическими препаратами мозга ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 13:49 |
|
idle
|
|||
---|---|---|---|
#18+
To Ikar +100 Где-то примерно так, другой вопрос если засечь какую-то определенную функцию... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 14:08 |
|
idle
|
|||
---|---|---|---|
#18+
Riska , где-то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 14:47 |
|
idle
|
|||
---|---|---|---|
#18+
AIS, В этом направлении сейчас и рисую. Не совсем так, но идея проверять время должна сработать. Допишу - скину. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 15:25 |
|
idle
|
|||
---|---|---|---|
#18+
RiskaAIS, ...Не совсем так... Почему не так? Помоему скрипт имеет необходимых два порога срабатывания (весь процесс - три фазы по 1800 сек.) и + реагирует "перезапуском" на действия пользователя после первой фазы (т.е. во время 2 и 3 фазы), когда он мог начать работать и работал какое-то время (например, как 5 час.(1-й перезапуск) так и 5 мин. (2-й перезапуск)). Ну, и есть два места где можно вставить действие программы на 1-ю фазу (т.е. после первых 30 мин.) и на 3-ю фазу (после 1 часа до закрытия программы). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 16:29 |
|
idle
|
|||
---|---|---|---|
#18+
AIS, На втором заходе мы не можем знать проснулся клиент, или просто прошло полчаса. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 09:17 |
|
idle
|
|||
---|---|---|---|
#18+
RiskaAIS, На втором заходе мы не можем знать проснулся клиент, или просто прошло полчаса. тогда так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
Прим.: 1-я фаза - пользователь спал 30 мин. /1-е срабатывание события Idle/ 2-я фаза - пользователь спал ещё 30 мин. /2-е срабатывание события Idle/. 3-я фаза - пользователь спит ещё 30 мин. /3-е срабатывание события Idle/. Во 2-й и 3-й фазах любая активность пользователя приведет к несовпадению пороговых значений интервала времени и включится "перезапуск", и неважно сколько он активничал. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 13:20 |
|
idle
|
|||
---|---|---|---|
#18+
AIS, Вот это работает: idle(10) // только для проверки. Должно быть 1800 /*instance variable*/ datetime idt_last_click Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 17:05 |
|
idle
|
|||
---|---|---|---|
#18+
Riska , прошу прощения за назойливость, но есть две мысли в слух: - не совсем понятно зачем Вы добавили дату, когда достаточно секунд. Это и проще, и не будет критической ситуации при переходя дня через "0" часов. - по-моему в вашем варианте не учитываются пару критических ситуаций: 1. Например, когда после 1-ых 30 минут сна пользователь снова активный 1800 сек. и снова засыпает. Тогда после 30 мин. должно сработать: Код: plaintext 1. 2.
Код: plaintext 1. 2. 3.
2. Попасть четко на пороговые значения может не удасться, т.к. между временем срабатывания события Idle и временем "Теста на сравнение" в скрипте может быть реальная t-задержки (если не из-за задержки работы ПО, то из-за перехода секунды от 59:59:59 в 00:00:00). Хотя у меня это тоже не до конца учтено. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 18:10 |
|
idle
|
|||
---|---|---|---|
#18+
AIS, 1. Тогда после 30 мин. должно сработать: CASE ELSE // first time Нет. Это сработает только в том случае, если клиент не проснулся (либо проснулся секунда в секунду по истечении времени - эту погрешность решено было не учитывать). 2. Попасть четко на пороговые значения удается в случае, когда клиент спит. Когда не спит - это не имеет значения. Из-за перехода секунды от 59:59:59 в 00:00:00 нет проблемы, т.к. это обычная секунда. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2010, 10:37 |
|
idle
|
|||
---|---|---|---|
#18+
Riska, Забыл добавить: не совсем понятно зачем Вы добавили дату Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2010, 11:00 |
|
idle
|
|||
---|---|---|---|
#18+
RiskaAIS, 1. Тогда после 30 мин. должно сработать: CASE ELSE // first time Нет. Это сработает только в том случае, если клиент не проснулся (либо проснулся секунда в секунду по истечении времени - эту погрешность решено было не учитывать). Да, он проснулся секунда в секунду (1800), и поверение программы совсем другое от прогнозированного. Лучше скорректировать код, чем пренебречь тем, что может вызвать критическую ошибку либо потерю данных. Когда клиент не спит, то действительно всё по барабану. Но когда он снова заснул, система должна отработать все три фазы, а она может проигнорировать Ваши заложенные действия при случайном совпадении значений. Вы полагаете, что система будет всегда четко попадать на пороговые значения? По-моему, пренебрегая малым Вы не видите бо'льшего. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2010, 02:37 |
|
idle
|
|||
---|---|---|---|
#18+
AIS, А у нас нет выхода. Либо кодячить на всех событиях в программе, либо дать шанс клиенту два раза секунда в секунду нажать на кнопочку и больше не прикасаться к проге (после первого раза ничего страшного не происходит - мы просто сохраняем данные в файл. Программа закроется только после третьего захода в idle). Вы полагаете, что система будет всегда четко попадать на пороговые значения? Секунда - более чем достаточная погрешность (мы проверяем секунды, а не доли секунд). Когда прога спит и не происходит никаких телодвижений мы не промахнемся. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2010, 09:56 |
|
idle
|
|||
---|---|---|---|
#18+
Так же возникла необходимость определения активности пользователя. Причём нужно определять работает ли он вообще в данный момент - т.е. наша программа запущена обязательно и мониторим по таймеру. Пользователь может работать в другой программе, а может нигде не работать. Для определения активности пользователя - нашёл функцию, которая возвращает когда было принято последний раз действие от пользователя. Function Boolean GetLastInputInfo ( ref ST_LASTINPUTINFO plii) Library "USER32.DLL" Меня устраивает в полной мере. Теперь могу как Messendger определить как долго не работает пользователь за компьютером. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2012, 09:38 |
|
|
start [/forum/topic.php?fid=15&gotonew=1&tid=1335573]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
155ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 251ms |
total: | 521ms |
0 / 0 |