OberonCore
https://forum.oberoncore.ru/

Как изменить частоту Actions ?
https://forum.oberoncore.ru/viewtopic.php?f=23&t=2667
Страница 1 из 1

Автор:  Иван Денисов [ Понедельник, 31 Май, 2010 18:46 ]
Заголовок сообщения:  Как изменить частоту Actions ?

С частотой Services.Actions 50мс предел FPS ~ 16, а нужно 25. Подскажите, пожалуйста, есть ли простой способ регулировать частоту обновления Actions, или придется пользоваться циклами для этих целей? Кто нибудь решал подобную проблему?

Код:
MODULE MyFpstest

IMPORT  Services, Fonts, Ports, Views, Properties, Models, Strings;

TYPE
   Action = POINTER TO RECORD (Services.Action) END;
   View = POINTER TO RECORD (Views.View) END;

VAR
   time: LONGINT;
   action: Action;
   font: Fonts.Font;
   fpsR: REAL;
   v: View;

PROCEDURE (count: Action) Do;
   BEGIN
         fpsR := 1000/(Services.Ticks() - time);
         time := Services.Ticks();
         Services.DoLater(action, Services.Ticks() + Services.immediately);
         Views.Update(v, TRUE);
   END Do;

PROCEDURE (v: View) Restore (f: Views.Frame; l, t, r, b: INTEGER);
   VAR summ: ARRAY 100 OF CHAR;
   BEGIN
      Strings.RealToStringForm(fpsR, 7, 0, 0, " ", summ);
      f.DrawString (0, 50*f.dot, Ports.black, "fps = " + summ, font);
   END Restore;

PROCEDURE Start*;
   BEGIN
      font := Fonts.dir.This("Arial", 15*Ports.point, {}, Fonts.normal);
      NEW(v); Views.OpenAux(v, "FPS test");
      NEW(action); Services.DoLater(action, Services.now)
   END Start;

BEGIN

END MyFpstest.

Автор:  Иван Денисов [ Среда, 03 Август, 2011 18:31 ]
Заголовок сообщения:  Re: Как изменить частоту Actions ?

В HostMenus есть переменная
Цитата:
idlePeriod = 50; (* ms *)
но, к сожалению, ее изменение ни приводит к более частому обновлению Services.Action, поэтому пока придуман только ручной разгон, более частый вызов Services.actionHook.Step; Этот прием описан тут.

Автор:  Илья Ермаков [ Среда, 03 Август, 2011 19:52 ]
Заголовок сообщения:  Re: Как изменить частоту Actions ?

Так 50 мс - это период главного цикла приложения в Винде... Быстрее никак.

Автор:  Александр Ильин [ Среда, 03 Август, 2011 19:57 ]
Заголовок сообщения:  Re: Как изменить частоту Actions ?

Илья Ермаков писал(а):
Так 50 мс - это период главного цикла приложения в Винде... Быстрее никак.
Say what?! А пруфлинк?

Автор:  Илья Ермаков [ Среда, 03 Август, 2011 20:22 ]
Заголовок сообщения:  Re: Как изменить частоту Actions ?

Утверждение следует понимать так, что для цикла
WHILE WinApi.GetMessageW(msg, 0, 0, 0) # 0 DO .... END
в "расслабленном" состоянии (идут только тики таймера) период обращения будет где-то порядка 50 мс.
Или примерно 20-25 раз за секунду. Быстрее винда не обеспечивает.

Таков же и период между двумя вызовами Services.actionHook.Loop, который выполняется из главного цикла графического ББ.

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