You could put a PR together and see what kind of reaction it receives. I 
suppose my main question would be about the motivation for restarting rather 
than creating a new one.

Best,
--Tim

On Saturday, January 02, 2016 07:19:19 AM Andreas Lobinger wrote:
> Hello colleagues,
> 
> i tried a few things, the closest to a solution is a low-level call to
> libuv:
> 
> 
> # timer restart demo
> 
> type t_status
>     i::Int64
> end
> 
> function t1(u::Timer)
>     # finishing timer -> just close and display
>     close(u);
>     display("t1, finished")
>     display(Dates.unix2datetime(time()));
> end
> 
> function t2(u_own::Timer,ts::t_status,u_other)
>     # restarting timer -> track status and restart u_other
>     ts.i += 1
>     display(Dates.unix2datetime(time()));
>     display(ts.i);
>     if ts.i > 9
>         close(u_own)
>     else
>         ccall(:uv_timer_again,Void, (Ptr{Void},), u_other.handle)
>     end
> end
> 
> display("get u1/t1 running -> would return in 2.0s")
> display(Dates.unix2datetime(time()));
> u1 = Timer(u1 -> t1(u1),2.0,2.0);
> 
> display("get u2/t2 running -> update 10 times")
> ts = t_status(0);
> u2 = Timer(u2 -> t2(u2,ts,u1),0.5,0.5);
> 
> 
> running this:
> 
> julia> include("timer-restart-demo.jl")
> "get u1/t1 running -> would return in 2.0s"
> 2016-01-02T15:15:51.466
> "get u2/t2 running -> update 10 times"
> Timer(Ptr{Void} @0x0000000002990420,Condition(Any[2016-01-02T15:15:52.162]
> ),1true
> )
> 
> julia> 2016-01-02T15:15:52.656
> 2
> 2016-01-02T15:15:53.157
> 3
> 2016-01-02T15:15:53.658
> 4
> 2016-01-02T15:15:54.159
> 5
> 2016-01-02T15:15:54.659
> 6
> 2016-01-02T15:15:55.159
> 7
> 2016-01-02T15:15:55.66
> 8
> 2016-01-02T15:15:56.161
> 9
> 2016-01-02T15:15:56.661
> 10
> "t1, finished"
> 2016-01-02T15:15:58.169
> julia>
> 
> 
> So, the original u1/t1 is only executed after the 10 restart by u2/t2.
> 
> I can live with the ccall, but would it make sense to contribute this to
> the overall Base.Timer?
> 
> Wishing a happy day,
>        Andreas

Reply via email to