Reloj de cuenta regresiva multi-usuario
Defina un canal que muestre un reloj de cuenta regresiva y una función que impulse la cuenta.
In[1]:=

CreateChannel["Countdown",
HandlerFunctions ->
Association["MessageReceived" -> ((Countdown`$time = #Message) &)],
Initialization :>
CreateWindow[
DocumentNotebook[{Dynamic[
ClockGauge[$time, PlotTheme -> "Business"]]}],
WindowSize -> All, WindowElements -> {}, ShowCellBracket -> False,
Background -> Black, WindowFrameElements -> {"CloseBox"},
Selectable -> False, WindowTitle -> "Countdown",
CellContext -> "Countdown`"],
Permissions ->
Association["All" -> "Read", "Owner" -> {"Write", "Execute"}]]Out[1]=
In[2]:=

countdown[t_] :=
DynamicModule[{paused = True, lbl = "Pause", ii = t, up = None},
Row[{Button[Dynamic[If[paused, "Start", lbl]], paused = ! paused;
up = If[paused, None, UpdateInterval -> 1]],
Dynamic[Refresh[
If[ii >= 0 && ! paused,
" \[LongRightArrow] " <>
TextString[ChannelSend["Countdown", ii--]],
If[ii <= 0, up = None; lbl = "Done"]; ""], up,
TrackedSymbols :> {paused}]]}]]Suscríbase al canal.
In[3]:=
listener = ChannelListen["Countdown"]Out[3]=

Configure una cuenta regresiva para cierto número de segundos y haga clic en el botón de inicio.
In[4]:=
countdown[20]Out[4]=
El reloj se actualiza mientras la cuenta regresiva corre, al menos que usted lo pause.
Out[5]=

Otros usuarios pueden suscribirse a su reloj de cuenta regresiva refiriéndose a su canal en ChannelListen.
In[6]:=
$WolframID <> ":Countdown"Out[6]=
In[7]:=
$WolframID <> ":Countdown";
ChannelListen[%]Out[7]=
