問題タブ [event-loop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - GLUT:イベントループに「ファイル読み取り可能」フックを追加する方法はありますか?
ソケットを開き、GLUT イベント ループで読み取り可能なイベントをハングアップしたいのですが...これを行う方法についてのアイデアはありますか? 移植可能な標準 GLUT コードが最適ですが、プラットフォーム固有のハックも受け入れます。
ありがとう!
c++ - 基本的なイベントループをどのように実装しますか?
GUI ツールキットを使用したことがある場合は、すべてが完了した後に実行する必要があるイベント ループ/メイン ループがあり、アプリケーションを存続させ、さまざまなイベントに応答できることを知っています。たとえば、Qt の場合、main() で次のようにします。
この場合、 app.exec() はアプリケーションのメインループです。
この種のループを実装する明白な方法は次のとおりです。
しかし、これは CPU を 100% に制限するため、実際には役に立ちません。では、CPU を完全に消費することなく、応答性の高いイベント ループを実装するにはどうすればよいでしょうか?
回答は、Python および/または C++ で高く評価されます。ありがとう。
脚注: 学習のために、独自のシグナル/スロットを実装し、それらを使用してカスタム イベントを生成します (例: go_forward_event(steps)
)。しかし、システム イベントを手動で使用する方法を知っている場合は、それについても知りたいです。
javascript - setTimeout(fn, 0) が時々役立つのはなぜですか?
私は最近、コードが<select>
JavaScript を介して動的にロードされていた、かなり厄介なバグに遭遇しました。この動的にロードされ<select>
たものには、事前に選択された値がありました。IE6 では、次のように、の値が selectedの属性と同期しない場合が<option>
あるため、 selected を修正するコードが既にありました。<select>
selectedIndex
<option>
index
ただし、このコードは機能しませんでした。フィールドselectedIndex
が正しく設定されていたとしても、間違ったインデックスが選択されてしまうことがありました。ただし、alert()
適切なタイミングでステートメントを挿入すると、正しいオプションが選択されます。これはある種のタイミングの問題かもしれないと考えて、以前にコードで見たことのあるランダムなことを試しました。
そして、これはうまくいきました!
問題の解決策はありますが、これで問題が解決する理由が正確にわからないので不安です。誰も公式の説明を持っていますか?を使用して「後で」関数を呼び出すことで回避しているブラウザの問題は何setTimeout()
ですか?
asp.net - ASP.Netイベントループの順序
私はこれに関して非常に多くの問題を抱えていたので(通常、前のページのボタンクリックイベントの前に実行されるページロードイベントで)、それを調べてイベントループの順序を投稿することにしました:
qt4 - Boost.AsioメインループをQt4やGTKなどのGUIフレームワークに統合する方法
Boost.AsioをQt4(推奨)またはGTKメインループと統合する方法はありますか?GTKはAPIのようなpoll(2)を提供するので、技術的には可能であるはずです。Qtは独自のネットワーク層を提供しますが、私はBoost.Asio用に作成された既存のコードを使用することを好みます。追加のスレッドを使用せずにそれらを統合したいと思います。
Qt4(推奨)またはGTKmmでこれを行う方法についての参考資料はありますか?
ありがとう。
編集
答えを簡単にするために、いくつかのことを明確にしたいと思います。QtとGTKmmはどちらも「selectlike」機能を提供します。
- http://qt-project.org/doc/qt-5.0/qtcore/qsocketnotifier.html
- http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__MainLoop.html
したがって、問題は、既存の「セレクター/ポーラー」をリアクターとしてBoost.Asioに統合する方法ですio_service
。現在、Boost.Asioは、select、kqueue、epoll、/ dev / poll、およびiocpをreactor/proactorサービスとして使用できます。GUIフレームワークのメインループに統合したいと思います。
任意の提案と解決策(より良い)は大歓迎です。
iphone - カスタムイベントループとUIKitコントロール。Appleのイベントループはどのような追加の魔法を実行しますか?
誰かがiPhoneのイベントループが内部で何をするかを説明する良いリンクを知っているか持っていますか?
OpenGLベースのiPhoneゲームフレームワークでカスタムイベントループを使用しています。ゲームレンダリングシステムを呼び出し、presentRenderbufferを呼び出し、CFRunLoopRunInModeを使用してイベントをポンプします。詳細については、以下のコードを参照してください。
UIKitコントロールを使用していない場合にうまく機能します(証拠として、最初にリリースされたゲームであるFacetapを試してください)。
ただし、UIKitコントロールを使用する場合、すべてがほぼ機能しますが、完全には機能しません。具体的には、UIKitコントロールのスクロールが正しく機能しません。
たとえば、次のシナリオを考えてみましょう。
- 独自のビューの上にUIImagePickerControllerを表示します。
- UIImagePickerControllerはカスタムビューをカバーします
- また、独自のレンダリングを一時停止しますが、カスタムイベントループを引き続き使用します。
述べたように、スクロールを除いてすべてが機能します。
- 写真の選択は機能します。
- フォトアルバムへのドリルダウンは機能し、トランジションアニメーションはスムーズです。
- フォトアルバムビューをスクロールしようとすると、ビューは指に追従します。
問題:スクロールすると、指を離した直後にスクロールが停止します。通常、移動速度に基づいてスムーズに続行しますが、カスタムイベントループを使用している場合は続行しません。iPhoneのイベントループは、私たちが実装していないUIKitスクロールに関連する魔法を実行しているようです。
これで、Appleのイベントループを使用し、NSTimerコールバックを介して独自のレンダリングを呼び出すことにより、UIKitコントロールを独自のシステムと一緒に正常に機能させることができます。ただし、カスタムイベントループに実装されていないiPhoneのイベントループ内で何が起こっているのかを理解したいと思います。
python - Tcl "socket -server" のようなソケット サーバー フレームワーク
socket -server
コンストラクト [1]を使用する Tcl コードの再実装を検討しています。
イベントループ処理/統合を含む、小規模で産業用強度のマルチユーザーネットワークベースのサーバーに対する Python の最適なオプションは何ですか?
qt - Qt/C++ イベント ループの例外処理
私は、QT と多くのサードパーティ ライブラリに大きく基づいたアプリケーションを使用しています。これらは、いくつかのケースでいくつかの例外をスローすることがあります。
ネイティブ Qt アプリでは、これによりアプリケーションが中止または終了します。多くの場合、メイン データ モデルは、外部データなしで純粋な Qt に保持しているため、そのままです。
そのため、このプロセスでエラーが発生したことをユーザーに伝えることで回復することもできると考えています。ユーザーは今すぐ保存するか、メインモデルの作業を続行することを決定する必要があります。
現在、プログラムはストーリーを語らずに静かに終了します。
c++ - 非同期イベントループの設計と問題
epoll / devpoll / kqueue / poll / select(windows-selectを含む)を使用して、非同期ソケットIOのイベントループを設計しています。
IO操作を実行するための2つのオプションがあります。
非ブロッキングモード、EAGAINでポーリング
- ソケットを非ブロッキングモードに設定します。
- ソケットへの読み取り/書き込み。
- 操作が成功した場合は、完了通知をイベントループに送信します。
- EAGAINを取得した場合は、「選択リスト」にソケットを追加し、ソケットをポーリングします。
ポーリングモード:ポーリングしてから実行します
- ソケットを追加してリストを選択し、ポーリングします。
- 読み取り可能で書き込み可能であるという通知を待つ
- 読み書き
- sucseedsのイベントループへの完了通知の投稿
私には、通常モードで使用する場合、特にソケットへの書き込みの場合、最初に必要なシステムコールが少なくなるように見えます(バッファーは非常に大きい)。また、「select」実行の数よりもオーバーヘッドを減らすことができるように見えます。特に、epoll / devpoll/kqueueのように拡張性の高いものがない場合に便利です。
質問:
- 2番目のアプローチの利点はありますか?
- Linux、FreeBSD、Solaris、MacOSX、Windowsなどの多数のオペレーティングシステムでのソケット/ファイル記述子の非ブロッキング操作に移植性の問題はありますか?
注:既存のevent-loop/socket-api実装の使用を提案しないでください
ajax - 非同期リクエスト(AJAXロングポーリングなど)にイベントループが必要なのはなぜですか
AJAXのロングポーリングに通常のスレッド化されたWebサーバー(Apacheなど)を使用することは悪い設計と見なされていることは理解していますが、その理由はよくわかりません。
これは、各ロングポーリング要求が通常の要求よりも大幅に時間がかかるためですか(したがって、プロセッサが拘束されます)?その場合、スレッドは実際に、使用する前にしばらくアイドル状態を維持できないほどのオーバーヘッドを消費しますか?