問題タブ [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.

0 投票する
1 に答える
817 参照

java - Java Swing アプリケーションが予期せず終了する

Google AppEngine Dev-Server も実行する Java で Swing アプリケーションを作成しようとしています (「AppEngine データベースを使用する Java アプリケーションの開発」を参照)。Swing Eventloop で奇妙な問題が発生しています。

次の2つのクラスがあります。

最終的にログメッセージなどを受け取るデバッグウィンドウ:

Google AppEngine Dev-Server をロードするヘルパー クラス:

私のmain(...)方法は次のようになります。

これにより、Swing Eventloop に関して非常に奇妙な動作が得られます。

  1. DevServer.launch(...)まず、Swing の動作方法: の行をコメント アウトするmain(...)と、アプリケーションが起動し、デバッグ ウィンドウが表示され、実行が継続されます。デバッグ ウィンドウを閉じると、アプリケーションはシャットダウンします。
  2. もう一度追加するDevServer.launch(...)と、期待どおりにサーバーが起動し、すぐに終了します (デバッグ ウィンドウも短時間表示された可能性がありますが、表示が速すぎます)。
  3. DevServer.launch(...)の後に行を移動するSwingUtilities.invokeLater(...)と、デバッグ ウィンドウが表示され、サーバーが起動し、サーバーが起動するとすぐに終了します。
  4. ここで、非常に奇妙になります: 行を に変更するとDevServer.launch(args, false)、つまり、サーバーが実際に起動するのを待たずにmain(...)メソッドをただちに完了すると、デバッグ ウィンドウが表示され、サーバーは正しく読み込まれ、アプリケーションは実行され続けますが、デバッグウィンドウを閉じても終了しない?!
  5. 次に にも変更JFrame.DISPOSE_ON_CLOSEするJFrame.EXIT_ON_CLOSEと、デバッグ ウィンドウが表示され、サーバーが正しく読み込まれ、アプリケーションが実行され続け、デバッグ ウィンドウを閉じると正しく終了します。

ここで、Swing イベント ループで何が起こっているのか分かりますか? 困惑しています... Swing イベント ループが早期に終了する原因となるものはありますか (シナリオ 2 および 3)? マルチスレッド アプリケーションは、Swing が最後に破棄されたウィンドウを検出するのを妨げますか (シナリオ 4)?

参考までに、Google AppEngine Dev Server のソースを次に示します

0 投票する
3 に答える
13610 参照

javascript - Node.js で非同期関数が返されるのを待ちます

Node.jsに非同期関数があるとします。基本的には次のようなものです。

もちろん、この関数を非同期スタイルで呼び出すことができます。

私が疑問に思っているのは、この関数を同期的に呼び出すことができるかどうかです。syncそのために、基本的に次のことを行うラッパー関数が必要です。

addAsync次に、次のように呼び出すことで、同期的に実行できます。

注: もちろん、実際にはparams[0]andを使用することはできませんが、それに応じて配列を使用しますが、この例では物事を単純にしたかったのです。params[1]arguments

さて、問題は、上記のコードが機能しないことです。whileループがブロックされ、イベントループが解放されないため、ブロックするだけです。

私の質問は、このサンプルを意図したとおりに実行することは可能ですか?

私はすでにさまざまなことを試しましたが、どれも役に立ちませんでしsetImmediateた。process.nextTick基本的に必要なのは、Node.js に現在の関数を一時停止し、イベント ループの実行を続行し、後で戻るように指示する方法でした。

yield少なくともNode.js 0.11.2以降では、ジェネレーター関数を使用して同様のことを実現できることを私は知っています。でも、なくても動くのか気になりますよね?

Node.jsで非同期プログラミングを行う方法、イベントループ、および関連するすべてのものを完全に認識していることに注意してください。特に Node.js では、このようなコードを書くことは悪い考えであることも十分承知しています。また、「アクティブな待機」もばかげた考えであることも十分に認識しています。したがって、非同期で行う方法などを学ぶようにアドバイスしないでください。そんなこと知ってる。

私が質問している理由は、好奇心と学びたいという願望からです。

0 投票する
0 に答える
248 参照

c++ - event_base_loop を継続的に実行する方法

イベントによって生成されたコールバックでファイル記述子のデータを読み取るプログラムを作成しようとしています。しかし、データを読み取ると終了します。つまり、event_base_loop() は 1 回だけ実行されます。データを読み取ったときに再度実行したいのですが、今はグローバル イベントを使用してそれを達成し、コールバック関数で add_event() を再度呼び出しています

複数の udp ソケットを持つ動的コードを作成する必要があるため、このアプローチを使用できません。fedora 17 を使用しており、コンパイラは g++ (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2) です。

0 投票する
1 に答える
884 参照

python - CMD インタラクションのための Python のイベント ループ

これに似た質問をいくつか見ましたが、私の特定の状況に本当に役立つものはありません。テキスト ファイルのディレクトリをループするスクリプトがあります。各ファイルには、コマンド プロンプトから実行する必要がある 1 行のスクリプト コマンドが 1 つあります。基本的なレイアウトは次のとおりです。

これを 1 つのファイルのみでテストすると正常に動作しますが、ディレクトリ内でそれらをすべて一緒に実行すると、各コマンドのランダムなポイントで停止するようです。それらが重複していて、終了する時間がないためだと思います(特定のコマンドは、実行するのにかなり長いプロセスであり、それぞれ約2分です)。次の呼び出しに移る前に、各 os.system 呼び出しが完全に実行されるようにするにはどうすればよいですか?

0 投票する
2 に答える
1926 参照

c++ - C++11 で動的に割り当てられた uv_timer_t (libuv) インスタンスを解放する

libuv イベント ループにタスクをスケジュールする必要がある関数があります。私のアイデアは、タイムアウトが 0ms のタイマーを作成することでした。次のコードを試しました:

このアプローチはうまく機能しますが、問題は、動的に割り当てられたタイマーが決して解放されないことです。コールバックでタイマーを解放しようとしましたが、セグメンテーション違反が発生しました:

uv_timer_stop(timer);また、実際のメモリを解放する前にandを呼び出そうとしましuv_unref((uv_handle_t*) timer);たが、セグメンテーション違反はまだ残っています。

0 投票する
3 に答える
1383 参照

qt - メインのループによってブロックされたQtシグナルとスロットメカニズム

次のような状況があります。

  • ループ内のメインで2 つSocketのオブジェクトが作成されます (元の問題には 1000 個のオブジェクトがあります)。作成時にメソッドが呼び出されます。forstart()
  • start()QTcpSocketホストに接続しようとする を作成します。
  • Socketconnected()QTcpSocket からのシグナルをキャッチし、デバッグ出力を出力するスロットがあります。

時系列で最初にすべてのSocketオブジェクトが作成され、その後ソケットが開始されます。デバッグ オプションの出力例を次に示します。

コード:

ドキュメントに次のように記載されているため、これは私が期待した動作ではありません。

シグナルが発行されると、それに接続されているスロットは、通常の関数呼び出しと同じように、通常すぐに実行されます。これが発生すると、シグナルとスロットのメカニズムは、GUI イベント ループから完全に独立します。

質問:

シグナルが送信されたときにスロットが「すぐに」(メインのループが終了した後だけでなく) 実行されるようにするにはどうすればよいですか?


私が現在見ている唯一の解決策(新しいスレッドを導入せずに)

この場合、シグナルとスロットの使用をやめ、すべてをstartメソッドに実装します。このようなもの: