Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Загрузка CPU 20% от простого двиганья мышкой (число прочтений - 7614 )
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Загрузка CPU 20% от простого двиганья мышкой
26. Сентября 2006 :: 09:38
Печать  
Причина, похоже в не правельной отработки звена очереди хука.
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #1 - 26. Сентября 2006 :: 09:41
Печать  
Отключи перехват мыши.
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #2 - 26. Сентября 2006 :: 09:48
Печать  
Цитата:
Причина, похоже в не правельной отработки звена очереди хука.

Ух! А что такое "звено очереди хука"?
  

FormEx developer
Наверх
www  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #3 - 26. Сентября 2006 :: 09:50
Печать  
Вобщем ситуация такая есть 2 хука Key_Hook и  Mouse_Hook, принцип работы у них одинаковый и оба после обработки очередного события возращает всегда 0 и иногда 1, но вот оправдано ли это? Потому как иногда надо ещё возращать и -1. Меня это и беспокоит.
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #4 - 26. Сентября 2006 :: 09:54
Печать  
Цитата:
Вобщем ситуация такая есть 2 хука Key_Hook и  Mouse_Hook, принцип работы у них одинаковый и оба после обработки очередного события возращает всегда 0 и иногда 1, но вот оправдано ли это? Потому как иногда надо ещё возращать и -1. Меня это и беспокоит.

Исправлю.
Кое-что там уже было исправлено по сравнению с 1С++.
  

FormEx developer
Наверх
www  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #5 - 26. Сентября 2006 :: 10:03
Печать  
Цитата:
Исправлю.
Кое-что там уже было исправлено по сравнению с 1С++.


А для 2.0.3.х линейки кирдык?
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #6 - 26. Сентября 2006 :: 10:11
Печать  
Цитата:
Цитата:
Исправлю.
Кое-что там уже было исправлено по сравнению с 1С++.


А для 2.0.3.х линейки кирдык?

Это не ко мне уже.
  

FormEx developer
Наверх
www  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #7 - 26. Сентября 2006 :: 10:20
Печать  
Спасиб огромное, будем на FormEx.dll переходить.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #8 - 26. Сентября 2006 :: 14:36
Печать  
Цитата:
возращает всегда 0 и иногда 1...иногда надо ещё возращать и -1.

Почему (для развития кругозора)?
  
Наверх
ICQ  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #9 - 29. Сентября 2006 :: 04:18
Печать  
spock писал(а) 26. Сентября 2006 :: 14:36:
Цитата:
возращает всегда 0 и иногда 1...иногда надо ещё возращать и -1.

Почему (для развития кругозора)?


Честно говоря сам не знаю, наверно нужно мануал почитать (т.е. дальше могу соврать), но помойму если обработчик возращает -1 то следующим звеньям цепочки code получается < 0
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #10 - 29. Сентября 2006 :: 05:42
Печать  
Цитата:
spock писал(а) 26. Сентября 2006 :: 14:36:
Цитата:
возращает всегда 0 и иногда 1...иногда надо ещё возращать и -1.

Почему (для развития кругозора)?


Честно говоря сам не знаю, наверно нужно мануал почитать (т.е. дальше могу соврать), но помойму если обработчик возращает -1 то следующим звеньям цепочки code получается < 0


Вот что говорит MSDN.
Цитата:
Return Value

If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.

If nCode is greater than or equal to zero, and the hook procedure did not process the message, it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH_MOUSE hooks will not receive hook notifications and may behave incorrectly as a result. If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the target window procedure.

Т.е. получается, что если возвращать -1, то это все тот же возврат "a nonzero value".
  

FormEx developer
Наверх
www  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #11 - 29. Сентября 2006 :: 13:51
Печать  
Цитата:
Вот что говорит MSDN.
Цитата:
Return Value

If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.

If nCode is greater than or equal to zero, and the hook procedure did not process the message, it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH_MOUSE hooks will not receive hook notifications and may behave incorrectly as a result. If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the target window procedure.

Т.е. получается, что если возвращать -1, то это все тот же возврат "a nonzero value".


Что-то не срастаеться, есть желание сделать демку с 2мя хуками показать следующее, если первый хук возвращает всегда 0, тогда вне зависимости возращаемого значения второй ловушкой, тагет получит событие. (К сожалению времени счас мало попробую сделать после выходных)
  
Наверх
ICQ  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #12 - 29. Сентября 2006 :: 13:56
Печать  
Цитата:
Что-то не срастаеться, есть желание сделать демку с 2мя хуками показать следующее, если первый хук возвращает всегда 0, тогда вне зависимости возращаемого значения второй ловушкой, тагет получит событие. (К сожалению времени счас мало попробую сделать после выходных)


Перечитал, понял что прогнал лажу, всё должно быть вот так:
первый должен возвращать не ноль (например +1), второй должен слать 0 (типа как было изначально в ВК), тогда третий хук получить code=0 и вместо отброса события будет его обрабатывать (хотя как помним первый отослал non zero!)
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #13 - 02. Октября 2006 :: 05:35
Печать  
Цитата:
Цитата:
Что-то не срастаеться, есть желание сделать демку с 2мя хуками показать следующее, если первый хук возвращает всегда 0, тогда вне зависимости возращаемого значения второй ловушкой, тагет получит событие. (К сожалению времени счас мало попробую сделать после выходных)


Перечитал, понял что прогнал лажу, всё должно быть вот так:
первый должен возвращать не ноль (например +1), второй должен слать 0 (типа как было изначально в ВК), тогда третий хук получить code=0 и вместо отброса события будет его обрабатывать (хотя как помним первый отослал non zero!)

Если первый отрабатывает сообщение и дальше его нельзя отработать, то он вернет не ноль и просто не вызовет следующий хук. А основной обработчик сообщений при возврате ненулевого их хука, не будет отрабатывать это сообщение. ИМХО, так.
  

FormEx developer
Наверх
www  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #14 - 02. Октября 2006 :: 06:20
Печать  
Вызывать следующий Хук обязан ВСЕГДА, управлять можешь только обрабатываемым кодом, если передаешь положительное или нулевое значение, тем самым говоришь следующему "попробуй обработай, может это тебе?". Если передаешь <0, тогда вспомни собственный код, что ты там делаешь если тебе передали code<0 ?
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #15 - 02. Октября 2006 :: 06:45
Печать  
Цитата:
Вызывать следующий Хук обязан ВСЕГДА, управлять можешь только обрабатываемым кодом, если передаешь положительное или нулевое значение, тем самым говоришь следующему "попробуй обработай, может это тебе?". Если передаешь <0, тогда вспомни собственный код, что ты там делаешь если тебе передали code<0 ?

Что-то ты не так понял.
Вызывать следующий хук я не обязан. Иначе это было бы сделано вообще без моего участия (автоматом бы он вызывался). Читай внимательно:
"If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the target window procedure."
Т.е. в случае, если я отрабатываю сообщение, то следующие хуки могу и не вызывать. Что логично, т.к. они могут всю мою отработку порушить.
Да и nCode - это совсем не то, что вернулось из прошлого хука.
  

FormEx developer
Наверх
www  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #16 - 02. Октября 2006 :: 08:53
Печать  
Цитата:
Цитата:
Вызывать следующий Хук обязан ВСЕГДА, управлять можешь только обрабатываемым кодом, если передаешь положительное или нулевое значение, тем самым говоришь следующему "попробуй обработай, может это тебе?". Если передаешь <0, тогда вспомни собственный код, что ты там делаешь если тебе передали code<0 ?

Что-то ты не так понял.
Вызывать следующий хук я не обязан. Иначе это было бы сделано вообще без моего участия (автоматом бы он вызывался). Читай внимательно:
"If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the target window procedure."
Т.е. в случае, если я отрабатываю сообщение, то следующие хуки могу и не вызывать. Что логично, т.к. они могут всю мою отработку порушить.
Да и nCode - это совсем не то, что вернулось из прошлого хука.


Тогда зачем нужен nCode<0 только для пост обработки сообщения?
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #17 - 02. Октября 2006 :: 09:19
Печать  
Цитата:
Тогда зачем нужен nCode<0 только для пост обработки сообщения?

Может это лучше у MSDN спросить? Или в MS написать по этому поводу? Улыбка
  

FormEx developer
Наверх
www  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #18 - 02. Октября 2006 :: 09:23
Печать  
Цитата:
Цитата:
Тогда зачем нужен nCode<0 только для пост обработки сообщения?

Может это лучше у MSDN спросить? Или в MS написать по этому поводу? Улыбка

Улыбка
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #19 - 02. Октября 2006 :: 14:21
Печать  
Читаю МСДН дальше, а именно комменты к функции SetWindowsHookEx

Calling the CallNextHookEx function to chain to the next hook procedure is optional, but it is highly recommended; otherwise, other applications that have installed hooks will not receive hook notifications and may behave incorrectly as a result. You should call CallNextHookEx unless you absolutely need to prevent the notification from being seen by other applications.

Так что вызывать нужно в любом случае !!

ЗЫ тем более, чтоб буквально вчера работал над Визуал1С++, также ставил системные хуки по ловле сообщений Винды для Конфигуратора.
Также у меня одновременно был запущен MS Spy++.
Так вот, стоило мне не вызвать CallNextHookEx (тестировал), так система сразу же повесилась и вылечилась только ресетом Печаль

  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Dave Owen OWL
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 26. Сентября 2006
Пол: Мужской
Re: Загрузка CPU 20% от простого двиганья мышкой
Ответ #20 - 02. Октября 2006 :: 14:28
Печать  
artbear писал(а) 02. Октября 2006 :: 14:21:
Так вот, стоило мне не вызвать CallNextHookEx (тестировал), так система сразу же повесилась и вылечилась только ресетом Печаль



У меня тоже примерно тоже самое было с хуками на файловую систему.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать