3

RunLoops私はAppleのドキュメントやGoogle検索のものを数日間読んでいます。の概念はかなり理解しましたが、RunLoopsに関するいくつかの基本的な質問にはまだ答えがありませんRunLoops

  1. どのようRunloopに正確に動作しますか? あるシステムレベルで実行されている while ループのようなものですか?
  2. それが実際に何らかのシステム レベルで何らかの while ループである場合、ポーリングとどう違うのでしょうか?

これについていくつかの指針を教えてください..

4

1 に答える 1

6

RunLoop (他のプラットフォームでは Window Handler、main-loop、event-loop などさまざまな名前が付けられています) の要点は、実行する必要がある場合にのみアプリケーションが実行されるイベント ドリブン アーキテクチャを容易にすることです。ユーザーインタラクション。これはポーリングの反対です。

アーキテクチャの基本は、メッセージが処理可能になるまでスレッドがブロックできるある種のメッセージ キューです。MacOSX および iOS システムでは、キューはMach カーネルRPCportです。Windows ではカーネル IPC キューであり、X-windows システムでは UNIX ドメインまたはネットワーク ソケットです。

イベントは、他のシステム コンポーネント (ウィンドウ マネージャーや他のアプリケーションなど) によってキューに挿入されます。すべての UI 処理を同じスレッドで実行するために、アプリケーションが他のスレッドからメッセージを送ることもよくあります。

実行ループ自体はアプリケーション空間に存在し、次のようになります。

while (!stop)
{
    message = WaitForNextMessage();
    DispatchMessage(message);
}

通常、使用する UI フレームワークには、特定の種類のイベントのイベント ハンドラーを登録するためのメカニズムが用意されています。

于 2013-08-17T12:17:41.900 に答える