メッセージループとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > メッセージループの意味・解説 

メッセージループ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/01 06:22 UTC 版)

NWSTK」の記事における「メッセージループ」の解説

全ての対応プラットフォームがメッセージループを持つ。具体的には、全てのプラットフォームで、Win32のGetMessage(), PeekMessage(), DispatchMessage()当の関数存在しており、それを組み合わせることにより独自のメッセージループをどこでも書くことができる。たとえば、キーイベントハンドラやメニューハンドラの中で、独自のメッセージループを書けば条件満たされるまでその場半永久的に停止することも可能である。このことにより、MS WindowsWin32似た流儀プログラムが可能となるため、Win32MFCから移植し易い。技術的側面では、ブラウザ上のJSでは、本来はメッセージループを自分では記述できないため、このようなことはWebAssembly用いて純粋なC/C++Rust言語コンパイルしただけではできない。しかし、SuperCの場合コンパイラ関数自動的に特殊変形することができるようになっているため、WebAssembly出力においても、SuperCのソースコードレベルでは簡単に記述できる。ブラウザ上のWebAssembly版においてキーイベントハンドラやメニューハンドラの中で独自のメッセージループを書いた場合内部的に単純な無限ループではなくプラットフォームの(見えない)イベントキュー自動的に一旦戻り、生のイベント発生すると、関数巻き戻されて、条件チェックするということ条件満たされるまで繰り返される。このときに用いられている技術は、大域ジャンプ強化したようなものである。大域ジャンプでは、一方向にしかジャンプできないが、SuperCでは、スタック情報上手く記録することにより、双方向ジャンプできるようになっている。なお、通常のプラットフォームでは、関数戻り値記録するスタックとローカルオート変数記録するスタックが共通であるため、その共通スタックだけを記録すれば比較簡単にこの機能実現できる。しかし、LLVMでは、関数戻りアドレス記録するスタックとローカルオート変数記録するスタックが別であるし、スタック内容単純なバイト列としてコピーしたり、スタックポインタLLVMアセンブラレベルで独自に再設定するのも禁止に近いため、単純に行かない。SuperCでは、生のイベントキューに戻る際には、LLVMret文を複数連続して使い逆に関数の場所に戻る時にはLLVMcall文関数呼び出し階層数と同じ回数だけ使っている。その際関数仮引数も必要あらば設定し直している。もし、この仕組み使わず単純なループ待機した場合CPU消費100%近くなり電池消耗発熱量激しくなるが、NWSTKの独自メッセージループで待機する場合には、この仕組み用いているため、CPUパワー消費は0に近くモバイルデバイスにおける電池消耗最小限にできる。

※この「メッセージループ」の解説は、「NWSTK」の解説の一部です。
「メッセージループ」を含む「NWSTK」の記事については、「NWSTK」の概要を参照ください。

ウィキペディア小見出し辞書の「メッセージループ」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


このページでは「ウィキペディア小見出し辞書」からメッセージループを検索した結果を表示しています。
Weblioに収録されているすべての辞書からメッセージループを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からメッセージループ を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「メッセージループ」の関連用語

メッセージループのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



メッセージループのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのNWSTK (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS