ChannelSend[channel,msg]
指定のメッセージ msg を指定のチャネルに送る.
ChannelSend
ChannelSend[channel,msg]
指定のメッセージ msg を指定のチャネルに送る.
詳細とオプション
- ChannelSend[channel,…]では,channel はチャネルオブジェクトとして,あるいはChannelObject内で使われている任意の形で指定することができる.
- メッセージ msg は任意の式でよい.
- デフォルト設定の$AllowExternalChannelFunctions=Falseでは,ChannelSend[channel,…]は認定チャネルとユーザ所有のチャネルにしか使えない.
- すべてのメッセージは,チャネルブローカサーバを介して送信される前に内部でWXFにシリアル化される.ただし,そのままの文字列はそのまま送信される.
- 将来リリースされる可能性のあるWolfram言語ベースっではないチャネルブローカクライアントは,文字列メッセージのみをサポートする可能性が高いため,プログラムのメッセージをそのようなクライアントと前方互換にする場合は,JSONやXMLのような言語に依存しない文字列形式で符号化することが推奨される.
- ChannelSendはメッセージがブローカに送信されるまでブロックするだけである.ブローカの受領を確認するまで待機はしない.
例題
すべて開く すべて閉じる例 (1)
CreateChannel["example"];
listener = ChannelListen["example"]ChannelSend["example", "message"]ChannelListenerオブジェクトのために指定されたフォームを使ったリスナからのメッセージも可能である:
listener["Message"]DeleteChannel["example"];スコープ (2)
CreateChannel["example"];
ChannelSend["example", <|"a" -> 1|>]ChannelSend["example", "a" -> 1]ChannelSend["example", {"a" -> 1, "b" -> 2}]ChannelSend["example", Unevaluated[Speak["hello"]]]ChannelSend["example", NotebookGet[InputNotebook[]]]DeleteChannel["example"];JSON文字列として符号化されたデータを送信するチャネルを作る:
CreateChannel["json"]listener = ChannelListen["json"]mydata = <|
"string" -> "hello world",
"integer" -> 42,
"real" -> 1.21,
"list" -> {"one", 2, 3.4},
"association" -> <|"key" -> "value"|>
|>;
ChannelSend["json", ExportString[mydata, "RawJSON"]]listener["Message"]ImportString[%, "RawJSON"]DeleteChannel["json"];アプリケーション (1)
圧縮したノートブックを受信して新規ウィンドウで開くチャネルリスナ:
CreateChannel["nb"];
listener = ChannelListen["nb", CreateWindow[ReleaseHold[#Message]]&]nb = DocumentNotebook[{TextCell["My Notebook", "Title"], ExpressionCell[x ^ 2, "Input"]}]ChannelSend["nb", nb]DeleteChannel["nb"];特性と関係 (2)
ChannelSendで送られたメッセージは,ChannelListenで作ったリスナで受け取ることができる:
CreateChannel["example"];
listener = ChannelListen["example"]DeleteChannel["example"];ChannelSendが送信したメッセージは,セキュリティのために,内容によってはチャネルリスナによって未評価のままで置かれるかもしれない:
CreateChannel["example"];
listener = ChannelListen["example"];
Scan[ChannelSend["example", #]&, {123, myFunction[1]}]myFunctionへの呼び出しは HoldComplete でラップされて読まれる:
listener["Message", All]DeleteChannel["example"];考えられる問題 (1)
ChannelSendは非同期に戻るため,チャネルに送信されたメッセージをそのチャネルに接続されたリスナが直ちに利用できるわけではない:
channel = CreateChannel["x"];
listener = ChannelListen[channel];ChannelSend[channel, "hello"];
listener["Message"]メッセージの送信後に短いポーズを挟むと,リスナがメッセージを受信する時間ができる:
ChannelSend[channel, "world"];
Pause[0.1];
listener["Message"]Whileループを使ってメッセージがリスナから利用できるようになるまで待つこともできる:
receivedQ = False;
listener2 = ChannelListen[channel, (receivedQ = True)&];
ChannelSend[channel, "world"];
While[!receivedQ, Pause[.001]];
listener2["Message"]DeleteChannel[channel];関連するガイド
テキスト
Wolfram Research (2016), ChannelSend, Wolfram言語関数, https://reference.wolfram.com/language/ref/ChannelSend.html (2020年に更新).
CMS
Wolfram Language. 2016. "ChannelSend." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020. https://reference.wolfram.com/language/ref/ChannelSend.html.
APA
Wolfram Language. (2016). ChannelSend. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ChannelSend.html
BibTeX
@misc{reference.wolfram_2026_channelsend, author="Wolfram Research", title="{ChannelSend}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/ChannelSend.html}", note=[Accessed: 15-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_channelsend, organization={Wolfram Research}, title={ChannelSend}, year={2020}, url={https://reference.wolfram.com/language/ref/ChannelSend.html}, note=[Accessed: 15-August-2026]}