OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: WinConsole + Services.Action ?
СообщениеДобавлено: Среда, 27 Апрель, 2011 16:18 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Хочу проверить совет, в связи с чем решил собрать безгуевое приложение.
Помогите, пожалуйста, ума не приложу, почему не выводится нужная информация. Я сделал, чтобы приложение принудительно ждало, пока не произойдут вычисления, процедура Do так вроде и не запускается ни разу.
Код:
MODULE MyFpstest;

   IMPORT Kernel, Win := WinApi, Log, Services;

   TYPE
      Action = POINTER TO RECORD (Services.Action) END;
      
   VAR
      time, counter: LONGINT;
      fpsR: REAL;
      ra: Action;

   PROCEDURE ProcessMessages;
      VAR msg: Win.MSG; res: INTEGER;
   BEGIN
      WHILE Win.PeekMessage(msg, 0, 0, 0, Win.PM_REMOVE) # 0 DO
         res := Win.TranslateMessage(msg);
         res := Win.DispatchMessageA(msg)
      END
   END ProcessMessages;

   PROCEDURE (a: Action) Do;
   BEGIN
      fpsR := 1000 / (Kernel.Time() - time);
      time := Kernel.Time();
      Log.Real(fpsR); Log.Ln;
      IF counter < 100 THEN
         INC(counter);
         Services.DoLater(a, Services.now)   
      END
   END Do;

   PROCEDURE Start*;
   BEGIN
      NEW(ra);
      counter := 0;
      Services.DoLater(ra, Services.now);
      Log.String("Start"); Log.Ln;
      WHILE counter < 100 DO
         ProcessMessages;
         Win.Sleep(100);
      END;
   END Start;

BEGIN
   Start
END MyFpstest.

MyFpstest.Start

DevLinker.LinkExe dos test.exe := Kernel$+ Files HostFiles Dates Meta Log Dialog Math Strings WinConsole Meta Services MyFpstest~


Вложения:
Комментарий к файлу: Экстра компонент используемый в программе
WinConsole.txt [5.13 КБ]
Скачиваний: 663
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinConsole + Services.Action ?
СообщениеДобавлено: Среда, 27 Апрель, 2011 16:25 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
А Action-ы кто крутить будет? :) У гуёвого приложения есть главный оконный цикл. А Вас что есть? :)
Чтобы работали Actions, нужно вызывать Services.actionHook.Loop (кажется, так)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinConsole + Services.Action ?
СообщениеДобавлено: Среда, 27 Апрель, 2011 18:08 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
а главный цикл и оконный это не разные вещи? главный это HostMenus.Loop, а оконный это HostMenus.AppWinHandler


Последний раз редактировалось Пётр Кушнир Среда, 27 Апрель, 2011 18:09, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinConsole + Services.Action ?
СообщениеДобавлено: Среда, 27 Апрель, 2011 18:08 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
divan, попробуйте этот модуль
Код:
MODULE xxxTimerHook;

   IMPORT
      Out := ConsoleOut,
      Services, SYSTEM, W := WinApi;
   
   VAR
      id: INTEGER;

   PROCEDURE TimerProc (hwnd: W.HWND; uMsg, idEvent, dwTimer: INTEGER);
   BEGIN
      Services.actionHook.Step
   END TimerProc;

   PROCEDURE InstallTimer;
   BEGIN
      id := W.SetTimer(0, 0, 1, SYSTEM.VAL(W.TIMERPROC, SYSTEM.ADR(TimerProc)))
   END InstallTimer;
   
   PROCEDURE UninstallTimer;
      VAR   res: INTEGER;
   BEGIN
      IF id # 0 THEN
         res := W.KillTimer(0, id); id := 0
      END
   END UninstallTimer;
   
BEGIN
   InstallTimer;
   IF id = 0 THEN
      Out.Open; Out.String("xxxTimerHook.InstallTimer failed"); Out.Ln
   END
CLOSE
   UninstallTimer
END xxxTimerHook.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinConsole + Services.Action ?
СообщениеДобавлено: Среда, 27 Апрель, 2011 18:54 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Илья Ермаков писал(а):
А Action-ы кто крутить будет? :)

Вау :)
Получился разгон BB (точнее обработки сообщении Services)! Я добавил одну строку, и действительно даже в самом ББ получил желаемые FPS, пока не отследил негативные последствия, правда.
Код:
WHILE counter < 100 DO
   ProcessMessages;
   Services.actionHook.Step;
   Win.Sleep(5);
END;

И в консольном все работает!


Последний раз редактировалось Иван Денисов Среда, 27 Апрель, 2011 19:34, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinConsole + Services.Action ?
СообщениеДобавлено: Среда, 27 Апрель, 2011 19:26 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Евгений Темиргалеев писал(а):
divan, попробуйте этот модуль
Код:
id := W.SetTimer(0, 0, 1, SYSTEM.VAL(W.TIMERPROC, SYSTEM.ADR(TimerProc)))

Есть у этого таймера нехорошие ограничения, не выставишь меньше 10, как я понял, но на деле еще хуже, так порядка 50 и получилось по проверке.
Цитата:
UINT_PTR WINAPI SetTimer(
__in_opt HWND hWnd,
__in UINT_PTR nIDEvent,
__in UINT uElapse,
__in_opt TIMERPROC lpTimerFunc
);
If uElapse is less than USER_TIMER_MINIMUM (0x0000000A), the timeout is set to USER_TIMER_MINIMUM. If uElapse is greater than USER_TIMER_MAXIMUM (0x7FFFFFFF), the timeout is set to USER_TIMER_MAXIMUM.


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

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


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

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


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

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