問題タブ [message-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 投票する
4 に答える
6800 参照

c# - WaitHandleを待っている間にメッセージループを実行する

UIスレッドがWaitHandleまたは他のスレッドプリミティブで待機している間にすべてのWindowsメッセージを処理する方法はありますか?

私は、それが非常に厄介な再入可能性の問題を引き起こす可能性があることを認識しています。とにかくやりたいです。

編集:待機は、UIスレッドで実行する必要がある複雑な関数の途中で発生します。したがって、待機をバックグラウンドスレッドに移動することはできません。(関数を2つに分割すると、複雑で保守不可能な混乱が発生します)

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

module - WTL 8.0 _Module とメッセージ ループ

私は WTL プロジェクト、実際には VS2008 を使用した WTL 8.1 に取り組んでいます。多くのチュートリアルで、_Module グローバル変数 (例: _Module.AddMessageLoop) の使用法を見てきました。私の現在のアプリケーションは、WinMain のスタックに CMessageLoop を作成し、後で CMessageLoop::Run () メソッドを呼び出します。これまでのところ、うまくいっています。最新の WTL リリースで _Module.Init、_Module.Term、および AddMessageLoop を呼び出す理由 (必要な場合) はありますか?

ありがとう。

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

c# - AutoResetEventおよびCOMオブジェクト

AutoResetEventは、WaitOne()呼び出しの途中でメッセージループを完全にフリーズし(場合によっては)、シグナルメッセージを効果的にブロックすることに気づきました。

IE:

  1. (UI)新しいスレッドが生成されました
  2. (UI)コードはWaitOne();を呼び出します。タイムアウト:10秒
  3. (T2)スレッドがデバイスを開き、Set()を呼び出します
  4. (UI)WaitOneはメッセージループをブロックします
  5. (UI)WaitOneタイムアウトが経過し、コードの実行が続行されます
  6. (UI)メインウィンドウは信号を受信して​​続行します(ただし、WaitOneは失敗しました)

何か案は?

編集:スレッドを指定するためのUI/T2を追加しました。また、サードパーティのライブラリを同期にしようとしています。デバイスを開くには、OpenOKまたはOpenFailedイベントを生成するOpen()呼び出しが含まれます。生成されたイベントに応じて、true / falseを返すboolOpen()呼び出しを作成しようとしています。

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

winapi - ウィンドウの移動とサイズ変更が MsgWaitForMultipleObjects に干渉する

MsgWaitForMultipleObjects を使用してメッセージ ループを実行し、UI メッセージの送信中に追加のイベントをキャッチするアプリケーションがあります。ウィンドウが移動またはサイズ変更されるとすぐに、マウスが離されるまで DefWindowProc が独自のメッセージ ループを開始するようです。この状況は、その間に外側のループが追加のメッセージをキャッチすることを防ぎます。

このためだけに、アプリケーションをマルチスレッド化するのは嫌です。それを解決する他の方法はありますか?

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

android - メッセージループなしで別のスレッドからAndroidダイアログを起動する

SurfaceView では、標準の「LockCanvas-Draw-unlockCanvasAndPost」ループ内でキャンバスに描画する新しいスレッドをディスパッチしています。(スレッドにはメッセージ ループが含まれていないことに注意してください)。

そのスレッドから Android 標準のダイアログを表示するにはどうすればよいですか?

スレッドには msg ループがないため、次のコードは機能しません。

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

multithreading - スレッド 101: Dispatcher とは?

むかしむかし、私はこのことを暗記していました。時間が経つにつれて、私の理解は希薄になり、それをリフレッシュするつもりです.

思い出すと、いわゆるシングル スレッド アプリケーションには 2 つのスレッドがあります。

a) メインまたは DllMain エントリ ポイントへのポインタを持つプライマリ スレッド。と

b) いくつかの UI、UI スレッド、別名、WndProc が実行されるセカンダリ スレッド、つまり、Windows がポストするメッセージを受信する WndProc を実行するスレッドを持つアプリケーションの場合。つまり、Windows メッセージ ループを実行するスレッドです。

UI アプリの場合、プライマリ スレッドは Windows からのメッセージを待機しているブロック状態にあります。それらを受信すると、それらをキューに入れ、メッセージ ループ (WndProc) にディスパッチし、UI スレッドが開始されます。

私の理解によると、ブロッキング状態にあるプライマリスレッドは次のとおりです。

C++

C# または VB.NET WinForms アプリ:

これは彼らがディスパッチャーと呼んでいるものですか?

私の質問は次のとおりです。

a) 上記の理解は正しいですか?

b) Dispatcher とはいったい何者なのか?

c) Windows/Win32 の観点からスレッドをよりよく理解し、それを C# などの高水準言語と結びつけることができるリソースを教えてください。Petzold は、彼の壮大な作品の主題に関する彼の議論で控えめです。

私はそれがある程度正しいと信じていますが、確認は安心します.

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

erlang - Erlang メッセージ ループ

erlang のメッセージ ループはどのように機能しますか?メッセージの処理に関しては同期しますか?

私が理解している限り、ループはメッセージを「受信」して開始し、何かを実行してループの別の反復にヒットします。

それで、それは同期しなければなりませんか?右?

複数のクライアントが同じメッセージ ループにメッセージを送信する場合、それらのメッセージはすべてキューに入れられ、次々に実行されますか?

複数のメッセージを並行して処理するには、異なるプロセスで複数のメッセージ ループを生成する必要があります。

それとも私はそれをすべて誤解しましたか?

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

erlang - Erlang でのコードのホットスワップ

最近、InfoQ で Erlang に関するビデオを見ました。そのビデオでは、作成者の 1 人がメッセージ ループの動作を置き換える方法を紹介していました。

彼は単純にメッセージ ループ コードの新しいバージョンのラムダを含むメッセージを送信し、古いループを再度呼び出す代わりに呼び出しました。

そのコードは、Erlang で参照されているホットスワップですか? それとも、他のよりネイティブな機能ですか?

0 投票する
4 に答える
29862 参照

c# - 新しいフォームをC#の別のスレッドで実行するにはどうすればよいですか?

ボタンのクリックが発生するたびに新しいスレッドを実行しようとしています。これにより、新しいフォームが作成されます。MainFormのボタンクリックイベントでこれを試しました。

サブフォームボタンクリックイベントのコードは次のようになります。

これは正しい方法ですか?2つの独立したフォームを開こうとしているので、一方のスレッドでの操作がもう一方のスレッドに影響を与えることはありません。

それとも、BackGroundworkerはこれを実装するためのソリューションですか?はいの場合、誰かがそれを手伝ってくれますか?

0 投票する
5 に答える
10838 参照

c++ - ウィンドウのメッセージ ループ スレッドの変更

最近、ウィンドウのメッセージ ループを独自のスレッドに配置しようとしましたが、なぜメッセージを受信しないのか疑問に思いましたが、ウィンドウを作成したスレッドに Windows がメッセージを投稿することを知りました。あるスレッドでウィンドウを作成し、別のスレッドにそのウィンドウのメッセージを受信させるにはどうすればよいでしょうか? PostThreadMessage 関数を見てきましたが、ウィンドウを作成したスレッドがメッセージをリッスンする必要があると思います。これはまさに私が避けようとしているものなので、その関数は必要なものではありません。

これはよくある質問のようで、答えを得るためにグーグルでかなりの時間を費やしましたが、見つけることができません。