OberonCore
https://forum.oberoncore.ru/

Реакция ББ на клик мыши
https://forum.oberoncore.ru/viewtopic.php?f=23&t=265
Страница 1 из 1

Автор:  Engiren [ Среда, 28 Июнь, 2006 13:01 ]
Заголовок сообщения:  Реакция ББ на клик мыши

В ББ, при нажатии и удерживании кнопки мыши происходит полная загрузка процессора. Можно ли эту проблему как то решить ?
Спасибо.

Автор:  Cardinal [ Среда, 28 Июнь, 2006 14:19 ]
Заголовок сообщения: 

И правда...... :o

Автор:  Сергей Губанов [ Среда, 28 Июнь, 2006 14:50 ]
Заголовок сообщения:  Re: Реакция ББ на клик мыши

Engiren писал(а):
Можно ли эту проблему как то решить?


А проблема-то хоть в чём состоит?

Автор:  Trurl [ Среда, 28 Июнь, 2006 15:24 ]
Заголовок сообщения:  Re: Реакция ББ на клик мыши

Сергей Губанов писал(а):
А проблема-то хоть в чём состоит?


Дело в следующем. В некоторых случаях ББ вместо того чтобы нормально обрабатывать сообщения начинает опрашивать мышь на предмет её местоположения. Хорошо бы вообще удалить Input у Ports.Rider и Ports.Frame. :evil:

Автор:  Илья Ермаков [ Четверг, 29 Июнь, 2006 13:25 ]
Заголовок сообщения: 

Ну да, если компоненту необходимо интерактивно реагировать на мышь, то он по TrackMsg входит в цикл опроса мыши.
Есть способ без этого обойтись, он был предложен в BlackBox Mailing List и основывается на использовании Services.Action. Однако точно решение сейчас не помню, а архив рассылки дома. Вечером посмотрю...

В принципе, в цикле опроса можно давать WinApi.Sleep где-то на 20мс...

Автор:  Alexey Veselovsky [ Четверг, 29 Июнь, 2006 15:11 ]
Заголовок сообщения: 

Илья Ермаков писал(а):
Ну да, если компоненту необходимо интерактивно реагировать на мышь, то он по TrackMsg входит в цикл опроса мыши.
Есть способ без этого обойтись, он был предложен в BlackBox Mailing List и основывается на использовании Services.Action. Однако точно решение сейчас не помню, а архив рассылки дома. Вечером посмотрю...

В принципе, в цикле опроса можно давать WinApi.Sleep где-то на 20мс...


Достаточно сделать слип даже на 1 мс - загрузка процессора сразу упадет почти до нуля.

Автор:  Trurl [ Четверг, 29 Июнь, 2006 16:29 ]
Заголовок сообщения: 

Илья Ермаков писал(а):
Ну да, если компоненту необходимо интерактивно реагировать на мышь, то он по TrackMsg входит в цикл опроса мыши.

А вот лучше бы он не входил. :(

Цитата:
В принципе, в цикле опроса можно давать WinApi.Sleep где-то на 20мс...

Ах, если бы дело было только в этом...

Автор:  Илья Ермаков [ Четверг, 29 Июнь, 2006 19:35 ]
Заголовок сообщения: 

Вот кое-что из Mailing List по поводу этой проблемы... Во-первых, чтобы выполняющиеся в фоне Actions не замораживались, нужно вызывать Services.actionHook.Step. Во-вторых, есть уже упомянутый Sleep.

The solution to this indeed is to call Services.actionHook.Step during a
timed loop.
This procedure exactly does the stepping of the background tasks
(Services.Actions) and works fine while being called on command level also.
(It should not be called by Actions, however!)
(Well, let me also clarify that this is my understanding of the module
Services and not a documented feature.)

How come you didn't try this yourself after having suggested it in xyBoss3?

Note that by adding such a call in HostPorts.Input followed by a conditional
Kernel.Sleep and having Services.actionHook.Step a little bit more robust
towards calls from anywhere (even Actions) any BB system becomes much more
responsive and won't do any excess CPU heating while tracking the mouse,
e.g. making a text selection ;)

Regards
Marco Ciot

Автор:  PGR [ Вторник, 22 Май, 2007 15:32 ]
Заголовок сообщения: 

Alexey Veselovsky писал(а):
Достаточно сделать слип даже на 1 мс - загрузка процессора сразу упадет почти до нуля.


В 1.6-rc5 так и сделано. :(

Попробуйте на форме в режиме редактирования выделить контролы рамкой ...

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/