OberonCore https://forum.oberoncore.ru/ |
|
WinConsole + Services.Action ? https://forum.oberoncore.ru/viewtopic.php?f=35&t=3429 |
Страница 1 из 1 |
Автор: | Иван Денисов [ Среда, 27 Апрель, 2011 16:18 ] | ||
Заголовок сообщения: | WinConsole + Services.Action ? | ||
Хочу проверить совет, в связи с чем решил собрать безгуевое приложение. Помогите, пожалуйста, ума не приложу, почему не выводится нужная информация. Я сделал, чтобы приложение принудительно ждало, пока не произойдут вычисления, процедура 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~
|
Автор: | Илья Ермаков [ Среда, 27 Апрель, 2011 16:25 ] |
Заголовок сообщения: | Re: WinConsole + Services.Action ? |
А Action-ы кто крутить будет? У гуёвого приложения есть главный оконный цикл. А Вас что есть? Чтобы работали Actions, нужно вызывать Services.actionHook.Loop (кажется, так) |
Автор: | Пётр Кушнир [ Среда, 27 Апрель, 2011 18:08 ] |
Заголовок сообщения: | Re: WinConsole + Services.Action ? |
а главный цикл и оконный это не разные вещи? главный это HostMenus.Loop, а оконный это HostMenus.AppWinHandler |
Автор: | Евгений Темиргалеев [ Среда, 27 Апрель, 2011 18:08 ] |
Заголовок сообщения: | Re: WinConsole + Services.Action ? |
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. |
Автор: | Иван Денисов [ Среда, 27 Апрель, 2011 18:54 ] |
Заголовок сообщения: | Re: WinConsole + Services.Action ? |
Илья Ермаков писал(а): А Action-ы кто крутить будет? Вау Получился разгон BB (точнее обработки сообщении Services)! Я добавил одну строку, и действительно даже в самом ББ получил желаемые FPS, пока не отследил негативные последствия, правда. Код: WHILE counter < 100 DO ProcessMessages; Services.actionHook.Step; Win.Sleep(5); END; И в консольном все работает! |
Автор: | Иван Денисов [ Среда, 27 Апрель, 2011 19:26 ] |
Заголовок сообщения: | Re: WinConsole + Services.Action ? |
Евгений Темиргалеев писал(а): 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. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |