OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 11:14

Часовой пояс: UTC + 3 часа




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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
С частотой 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.


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить частоту Actions ?
СообщениеДобавлено: Среда, 03 Август, 2011 19:52 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Так 50 мс - это период главного цикла приложения в Винде... Быстрее никак.


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Илья Ермаков писал(а):
Так 50 мс - это период главного цикла приложения в Винде... Быстрее никак.
Say what?! А пруфлинк?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как изменить частоту Actions ?
СообщениеДобавлено: Среда, 03 Август, 2011 20:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Утверждение следует понимать так, что для цикла
WHILE WinApi.GetMessageW(msg, 0, 0, 0) # 0 DO .... END
в "расслабленном" состоянии (идут только тики таймера) период обращения будет где-то порядка 50 мс.
Или примерно 20-25 раз за секунду. Быстрее винда не обеспечивает.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB