Wolfram言語

チャネルフレームワーク

複数ユーザの秒読み時計

秒読み時計を表示するチャネルと,秒読みを行う関数を定義する.

In[1]:=
Click for copyable input
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]:=
Click for copyable input
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}]]}]]

チャネルを購読する.

In[3]:=
Click for copyable input
listener = ChannelListen["Countdown"]
Out[3]=

ある一定秒数間の秒読みを設定し,ボタンをクリックして開始する.

In[4]:=
Click for copyable input
countdown[20]
Out[4]=

時計は,途中で停止されない限り,秒読みが実行されている間更新される.

Out[5]=

ChannelListenでこのチャネルを参照することにより,他のユーザがこの秒読み時計を購読することができる.

In[6]:=
Click for copyable input
$WolframID <> ":Countdown"
Out[6]=
In[7]:=
Click for copyable input
$WolframID <> ":Countdown"; ChannelListen[%]
Out[7]=

関連する例

de en es fr ko pt-br ru zh