cancel timer:apply_interval/4

49 views
Skip to first unread message

Дмитрий Омелечко

unread,
Oct 21, 2009, 4:30:24 AM10/21/09
to erlang-...@googlegroups.com
Как лучше всего экстренно остановить работу timer:apply_interval/4?

timer:cancel(TRef) не помагает, т.к при каждом тике он новый. а очень надо.

exit() крешет весь gen_server что не приемлемо.

Dennis Novikov

unread,
Oct 21, 2009, 8:24:00 AM10/21/09
to erlang-...@googlegroups.com
2009/10/21 Дмитрий Омелечко <dva...@gmail.com>:

> Как лучше всего экстренно остановить работу timer:apply_interval/4?
>
> timer:cancel(TRef) не помагает, т.к при каждом тике он новый. а очень надо.

timer пишет собственноручно сгенерированный ref() в свой личный ets.
Пока жив заказавший таймер процесс (вернее, пока от него не пришло
сообщение 'DOWN'), ref там живёт.
В противном случае это где-то в вашем коде заказываются новые таймеры.

WBR,
DN

Valentin Nechayev

unread,
Aug 4, 2011, 9:29:59 AM8/4/11
to erlang-...@googlegroups.com
2009/10/21 Дмитрий Омелечко <dva...@gmail.com>:

> Как лучше всего экстренно остановить работу timer:apply_interval/4?
>
> timer:cancel(TRef) не помагает, т.к при каждом тике он новый. а очень надо.

Мнэээ... а точно новый каждый тик? Честно говоря, сомнительно.

В принципе можно зашить в начальный вызов какой-то ref, а по тику
сравнивать с запомненным где-то, но некрасиво.

--
-netch-

Ivan Glushkov

unread,
Aug 4, 2011, 11:01:47 AM8/4/11
to erlang-...@googlegroups.com
1> {ok, TRef} = timer:apply_interval(100, io, format, ["hello~n"]),
timer:sleep(1000), timer:cancel(TRef).
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
{ok,cancel}

Иван.

2011/8/4 Valentin Nechayev <net...@gmail.com>:

> --
> Страница рассылки: http://groups.google.com/group/erlang-russian
>  Jabber-конференция: erl...@conference.jabber.ru
>  Новости: http://erlanger.ru
> Написать письмо: erlang-...@googlegroups.com
> Отписаться: erlang-russia...@googlegroups.com
>

Artem Golovinsky

unread,
Aug 4, 2011, 11:08:48 AM8/4/11
to erlang-...@googlegroups.com
ээээ... неудивительно, ты кенселишь таймер когда он уже завершился

 4> {ok, TRef} = timer:apply_interval(100, io, format, ["hello~n"]),
4> timer:sleep(500), timer:cancel(TRef).
hello
hello
hello
hello
hello
{ok,cancel}
5> 



4 августа 2011 г. 19:01 пользователь Ivan Glushkov <g...@aboutecho.com> написал:
1> {ok, TRef} = timer:apply_interval(100, io, format, ["hello~n"]),
timer:sleep(500), timer:cancel(TRef).



--
Best regards,
Artem Golovinsky

Artem Golovinsky

unread,
Aug 4, 2011, 11:09:52 AM8/4/11
to erlang-...@googlegroups.com
ой, сорри. В сообщении выше все правильно :-)

4 августа 2011 г. 19:08 пользователь Artem Golovinsky <artemgo...@gmail.com> написал:
Reply all
Reply to author
Forward
0 new messages