Oberon space

General Category => Общий раздел => Тема начата: valexey_u от Май 10, 2013, 02:50:51 pm

Название: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 02:50:51 pm
Задача - хотя бы 60 (а лучше 100) раз в секунду что-то там делать. Services.DoLater как оказалось очень слоупочна - максимум получается 16 раз в секунду.

Тестировал так:
MODULE BackgroundAction;

IMPORT StdLog, Services, Kernel;

TYPE
   Action = POINTER TO RECORD (Services.Action) END;
VAR
   count : INTEGER;
   begin : LONGINT;
   action : Action;
   
   PROCEDURE (a: Action) Do;
   BEGIN
      INC(count);
      IF count  = 1000 THEN
         StdLog.Real((Kernel.Time() - begin)/1000);
         StdLog.Ln;
         StdLog.Real(1000/((Kernel.Time() - begin)/1000));
         StdLog.Ln;
      ELSE
         Services.DoLater(a,Services.now);
      END
   END Do;
   
   PROCEDURE Start*;
   BEGIN
      count := 0;
      NEW(action);
      begin := Kernel.Time();
      Services.DoLater(action,Services.now);
   END Start;

BEGIN
   
END BackgroundAction.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 03:13:47 pm
Зачем отвечать, ведь мы уже знаем итог этого треда.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 03:23:52 pm
Где же пиздизер, почему он до сих пор не написал правильный ответ?
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 03:34:24 pm
Зачем отвечать, ведь мы уже знаем итог этого треда.
Не знаешь что сказать по делу - лучше промолчи.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: DddIzer от Май 10, 2013, 03:39:47 pm
Зачем отвечать, ведь мы уже знаем итог этого треда.
Не знаешь что сказать по делу - лучше промолчи.
  нехорошо, Алексей,  зверушка пришла покакать.. а вы ей запрещаете.. негуманно это (разорвать же может).. и противоречит правилам форума...
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 03:40:53 pm
Зачем отвечать, ведь мы уже знаем итог этого треда.
Не знаешь что сказать по делу - лучше промолчи.
  нехорошо, Алексей,  зверушка пришла покакать.. а вы ей запрещаете.. негуманно это (разорвать же может).. и противоречит правилам форума...
Я запрещаю также как может запретить любой на форуме. Это правилам не противоречит.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: maliya от Май 10, 2013, 03:50:38 pm
the "Action" topic has been discussed on oberoncore for a  long time,you'd better make a search in it!
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 03:51:39 pm
Зачем отвечать, ведь мы уже знаем итог этого треда.
Не знаешь что сказать по делу - лучше промолчи.
Бгг. Ограничиваешь свободу слова, нехорошо это. Непоследовательно.
Олсо я просто не палю ответ.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: Geniepro от Май 10, 2013, 03:52:57 pm
Зачем отвечать, ведь мы уже знаем итог этого треда.
Не знаешь что сказать по делу - лучше промолчи.
Ай-яй-яй! Это что, цензура? Попытка навести модераторский шухер? o_O Того и гляди до банхаммера дело дойдёт )))

Алексей, ну труЪ-оберонщики они же такие, им бы лишь бы полаять. Так что ничего другого и ожидать от них не приходится )))
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 03:54:26 pm
По количеству многоточий в посте, пиздизер почти догнал девочек с ОБВМ.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: DddIzer от Май 10, 2013, 03:56:02 pm
По количеству многоточий в посте, пиздизер почти догнал девочек с ОБВМ.
а еще ведь не вечер  ;)
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 03:56:30 pm
Алексей, ну труЪ-оберонщики они же такие, им бы лишь бы полаять. Так что ничего другого и ожидать от них не приходится )))
Омг, ведь получается, что оберспейс и есть пристанище труЪ-оберонщиков.

А расчеловечивание это их (то есть, ваша) отличительная черта. Слишком мейнстримная, в любом случае.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 03:56:49 pm
the "Action" topic has been discussed on oberoncore for a  long time,you'd better make a search in it!

I have already searched, and found this topic: http://forum.oberoncore.ru/viewtopic.php?f=23&t=1426

But I did not found topic about DoLater max frequency. I need more then 30 Hz (60 or 100) actions Do call.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 04:01:24 pm
Уже три профессианала фтреди, а до сих пор нет ответа.
Плохо быть оберспейсером.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: DddIzer от Май 10, 2013, 04:02:03 pm

Ай-яй-яй! Это что, цензура? Попытка навести модераторский шухер? o_O Того и гляди до банхаммера дело дойдёт )))

Алексей, ну труЪ-оберонщики они же такие, им бы лишь бы полаять. Так что ничего другого и ожидать от них не приходится )))
да нет же, Евгений, все  не так - они все страшно занятые люди... трудятся на благо человечества , но иногда хочется посрать.. (натура у них такая) - а правила  конюшни жестоки - прилюдно срать разрешается только избранным.. вот и лезут те кому сильно невтерпеж (гопники вроде акапета и мохнорыла)
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: Geniepro от Май 10, 2013, 04:05:53 pm
да нет же, Евгений, все  не так - они все страшно занятые люди... трудятся на благо человечества , но иногда хочется посрать.. (натура у них такая) - а правила  конюшни жестоки - прилюдно срать разрешается только избранным.. вот и лезут те кому сильно невтерпеж (гопники вроде акапета и мохнорыла)
Что-то я сомневаюсь, что kkk -- это Петруха. Разве Петруха писал программы на Яве? Он же вроде убеждённый оберонщег в отличие от kkk...
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 04:07:02 pm
дети оберспейса сетуют на срач.
больной безумный мир.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: DddIzer от Май 10, 2013, 04:07:56 pm
да нет же, Евгений, все  не так - они все страшно занятые люди... трудятся на благо человечества , но иногда хочется посрать.. (натура у них такая) - а правила  конюшни жестоки - прилюдно срать разрешается только избранным.. вот и лезут те кому сильно невтерпеж (гопники вроде акапета и мохнорыла)
Что-то я сомневаюсь, что kkk -- это Петруха. Разве Петруха писал программы на Яве? Он же вроде убеждённый оберонщег в отличие от kkk...
Э... нет Петруха... это не имя - это ПРИЗВАНИЕ
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 04:09:42 pm
Может, когда профессионалы закончат друг другу отлизывать, мы узнаем ответ на вопрос веселовского :)
А может, на хабре спросить, там точно ответят.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: DddIzer от Май 10, 2013, 04:11:57 pm
Может, когда профессионалы закончат друг другу отлизывать, мы узнаем ответ на вопрос веселовского :)
А может, на хабре спросить, там точно ответят.
может быть.. а что  нетерпеж?
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: Geniepro от Май 10, 2013, 04:16:03 pm
Странно -- новолуние же.
Наверное это всё же весна так действует на kkk и Олега (когда тот тут появляется изредка) )))
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: maliya от Май 10, 2013, 04:18:37 pm
HostMenus.idlePeriod  =50 (*ms*),you can change it,compile.. test again ):
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: DddIzer от Май 10, 2013, 04:18:46 pm
Странно -- новолуние же.
Наверное это всё же весна так действует на kkk и Олега (когда тот тут появляется изредка) )))
боюсь что и здесь вы ошиблись -  биология , Евгений, биология организма.. :D
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 04:20:34 pm
Странно -- новолуние же.
Наверное это всё же весна так действует на kkk и Олега (когда тот тут появляется изредка) )))
Да на оберспейсе психолухи-профессионалы орудуют.
Применяют психологику без лицензии.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: DddIzer от Май 10, 2013, 04:26:41 pm
Странно -- новолуние же.
Наверное это всё же весна так действует на kkk и Олега (когда тот тут появляется изредка) )))
Да на оберспейсе психолухи-профессионалы орудуют.
Применяют психологику без лицензии.
вот видите, Евгений,  абсолютно корректный вам ответ, пациента (после консультации у проктолога)- учитесь!!!  :)
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 04:39:52 pm
HostMenus.idlePeriod  =50 (*ms*),you can change it,compile.. test again ):

Wow! It works! Thanks!
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 05:01:50 pm
HostMenus.idlePeriod  =50 (*ms*),you can change it,compile.. test again ):

Wow! It works! Thanks!

Or we can just setup new windows timer, without recompiling HostMenus:
res := WinApi.SetTimer(HostWindows.main, 1, newIdlePeriod, NIL);

This is platform dependent hack, but it works :-)

Or we can add to HostMenus new function for setting new idle period.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: maliya от Май 10, 2013, 05:28:19 pm
>Or We can Add to HostMenus New function for setting New Idle period.
for what reason? if you need a quick action, you'd better set a new timer2 with short period(<50),and
handle it in HostMenus.ApplWinHandler, and move Services.actionHook.Step; form HostWindows.Idle to it.


Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: Geniepro от Май 10, 2013, 05:37:28 pm
Слава китайцам! Слава КПК!! Слава КПСС!!! ))
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 05:38:47 pm
>Or We can Add to HostMenus New function for setting New Idle period.
for what reason? if you need a quick action, you'd better set a new timer2 with short period(<50),and
handle it in HostMenus.ApplWinHandler, and move Services.actionHook.Step; form HostWindows.Idle to it.
And I need to remove Services.actionHook.Step; from HostWindows.Idle? (change and recompile HostWindows module)
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 05:40:51 pm
>Or We can Add to HostMenus New function for setting New Idle period.
for what reason? if you need a quick action, you'd better set a new timer2 with short period(<50),and
handle it in HostMenus.ApplWinHandler, and move Services.actionHook.Step; form HostWindows.Idle to it.
And I need to remove Services.actionHook.Step; from HostWindows.Idle? (change and recompile HostWindows module)
Oh, sorry. Ofcource right answer is "No".

But still need to use directly Win32 API, does it?
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: kkk от Май 10, 2013, 05:54:43 pm
Профессионалы итт ожидаемо нихуя не предложили.
So pathetic oberspace, leave it, maliya, here is nobody to have conversation with, only trolls and oberon haters.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: maliya от Май 10, 2013, 05:58:59 pm
the BB has  only a time1 which control caret flip, window update,actions.step ...etc,if you set a short period for it, the whole framework will update quickly...,that is not you wanted, so  handling actions.step alone would be suitable.  but I dont known your actual work's target , so it is only a suggestion.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: DddIzer от Май 10, 2013, 06:07:35 pm
Профессионалы итт ожидаемо нихуя не предложили.
So pathetic oberspace, leave it, maliya, here is nobody to have conversation with, only trolls and oberon haters.
гыыыы...  ;D что меня забавляет в дураках, так это их предсказуемость.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 06:09:39 pm
the BB has  only a time1 which control caret flip, window update,actions.step ...etc,if you set a short period for it, the whole framework will update quickly...,that is not you wanted, so  handling actions.step alone would be suitable.  but I dont known your actual work's target , so it is only a suggestion.

My target is 30..60 fps for picture animation.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 06:16:08 pm
Профессионалы итт ожидаемо нихуя не предложили.

Почему же? vlad предложил. И это тоже сработало.
Кстати, а в BB есть полнотекстовый поиск по исходникам? Тот что в доке ищет исключительно по докам.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: maliya от Май 10, 2013, 06:19:08 pm
you can send me a demo source, I can change myBB modules and test, and give a result to you
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 06:26:00 pm
you can send me a demo source, I can change myBB modules and test, and give a result to you
ok. May be tomorrow. (I must complete it)
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: ilovb от Май 10, 2013, 06:32:10 pm
valexey, поиск в меню info
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: valexey_u от Май 10, 2013, 06:40:45 pm
valexey, поиск в меню info
Нашел, спасибо.
Название: Re: [BlackBox] Делать что-то часто по таймеру.
Отправлено: maliya от Май 11, 2013, 08:11:41 am
valexey,

HostMenus    add:
   
       ......
        VAR newPeroid:INTEGER;

        .....
PROCEDURE SetPeriod*(period:INTEGER);
VAR res:INTEGER;
BEGIN
res := WinApi.SetTimer(HostWindows.main, 1, period ,  NIL);
newPeroid :=period;
END SetPeriod;

PROCEDURE PeroidGuard* (period: INTEGER; VAR par: Dialog.Par);
BEGIN
IF newPeroid = period THEN par.checked:=TRUE
ELSE par.checked:=FALSE;
END;
END PeroidGuard;

        PROCEDURE Init;
       .......
             newPeroid :=idlePeriod;
        END Init;
compile it.

add a Test\Rsrc\menus.odc
MENU "TimerPeriod"
"10" "" "HostMenus.SetPeriod(10)" "HostMenus.PeroidGuard(10)"
        "20" "" "HostMenus.SetPeriod(20)" "HostMenus.PeroidGuard(20)"
"30" "" "HostMenus.SetPeriod(30)" "HostMenus.PeroidGuard(30)"
"40" "" "HostMenus.SetPeriod(40)" "HostMenus.PeroidGuard(40)"
"50" "" "HostMenus.SetPeriod(50)" "HostMenus.PeroidGuard(50)"
END


and select a peroid from menu, test you code !

PS: no need change other code, I have a panic for the caret flip ):