問題タブ [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.
vba - DDE 通信が Excel からランダムにハングアップするのはなぜですか (またはいつ検出するか)。
問題の性質:
ManMan データベース システム、Minisoft の端末アプリケーションとの DDE 接続と会話を正常に確立するマクロを有効にした Excel シートがあります。DDE は約 95% の時間で正常に動作しますが、Excel と Minisoft の間でデータが交換されていないように見えることがあります (~5%)。これが発生すると、Minisoft シェルは、データがクラッシュするか、ユーザーがイライラして Excel プロセスを終了するまで、基本的にシートをロックするのを待ってハングします。この会話のハングは、シェルが開かれた後の会話の開始時にのみ発生し、ランダムに発生するようです (シートの VBA を 3 回実行してハングするか、50 回実行してもハングしない)。DDE のハングが発生すると、マシンを再起動するか、ログアウトしてウィンドウに再度ログインするまで、次の実行試行ごとに (Excel/Minisoft を閉じて再度開いても) ハングしますが、他に何も解決しないようです。誰かがこの問題の原因について何か洞察を持っている場合は、私に知らせてください. それを防ぐか、このハングがいつ発生するかを検出できるようにする必要があります。
コードと追加情報:
DDE から Minisoft ターミナルに渡される文字列は、必要な出力をトリガーするためのキーワードです。問題は何を伝えるかではなく、伝える能力です。問題が発生すると、StartManMan Sub で発生すると思います。ターミナルは起動されますが、ターミナルは無期限に静止しているため (キーストロークを待っている - ユーザーはターミナルと直接対話でき、ターミナル自体は応答します)、Excel は無力なままであるため、文字列はターミナルに渡されないようです。コードの実行で忙しい。この問題は、「KBSTRING HELLO」からの「HELLO」の出力が表示されない場合にのみ発生します。「HELLO」が表示された場合は、常に 100% の確率で完全に機能します。
ぶら下げについて次の記事を読みました: http://www.angelfire.com/biz/rhaminisys/ddeinfo.html#DDEslow そして、それがスレッドに関連している可能性があることを認識していますが、もしそうなら、それは私の質問のポイントを変えるだけです (どのようにこれを防止/検出しますか?)。また、参照されているバグ記事 Q136218 は利用できなくなりました。
mfc - MFC でのメッセージ ループ
Win32 API について少し学習しましたが、MFC について学習したいと思います。私の電子ブックでは、このクラスはアプリケーションのメイン スレッドを管理すると書かれていましたが、このクラスには,関数のCWinApp
ようなものは見つかりません。では、メッセージ ループを開始するにはどうすればよいでしょうか。GetMessage
DispatchMessage
誰かが私のためにこれを説明してください。申し訳ありませんが、私は MFC の初心者で、英語が下手です。また、Visual Studio の MFC に関する電子ブック/チュートリアルはどこにありますか?
c++ - ウィンドウ プロシージャの外で WM_DESTROY または WM_CLOSE メッセージを取得できないのはなぜですか?
ウィンドウ プロシージャにディスパッチする直前に、メッセージ ループ内のメッセージを読み上げたいと考えていました。このように読み取ろうとしたほとんどのメッセージは正しく読み取られましたが、ウィンドウを閉じると、WM_CLOSE
またはWM_DESTROY
メッセージが受信されなかったかのように読み取れませんでした。これが私がすることです:
最初のケースにブレークポイントを設定しましたが、(「X」をクリックして) ウィンドウを閉じてもブレークポイントにヒットしません。ただし、ウィンドウプロシージャで確認するとWM_DESTROY
、読み込まれ、すべてがうまくいきます。外に出ないのはなぜですか?
そのようなメッセージはウィンドウ プロシージャに直接送信されますか? どのように?
java - TCP サーバーからの着信メッセージをリッスンすると StackOverflow が発生する
C# TCP サーバーからのメッセージを継続的にリッスンする必要があるため、別のスレッドで行います。
私のアプローチの何が問題になっていますか?StackOverflowError が発生するのはなぜですか? run()
非ブロッキングであるため、非常に高速に呼び出されるBufferedReader.readLine()
と思いますが、どうすればよいですか?
.net - 不明な Windows メッセージ 0xC052
私は問題 (アプリケーション内で開いているフォームを検出する方法) に取り組んでおり、理解できない Windows メッセージに出くわしました: 0xC052。
これは、フォームが開いたときに MessageFilter で受け取る最初のメッセージです。しかし、参照が見つからなかったので、フォームが開かれたことをメッセージが信頼できると言っているという仮定に頼りたくありません。
編集:コードを追加
c# - .NET のイベント メカニズム
私がこれまでに見た C#/.NET に関するすべての本で、イベントについて話すときは、イベントの作成と消費
について話しています。
私たちのコードの背後でそれがどのように機能するか、それを実行するメカニズムは何かを少し理解したいと思っています。
Windows メッセージ ループが、発生したイベントのキューのように機能しているという事実から、私は少し知っています。
たとえば、WM_KEYDOWN
、またはWM_LBUTTONDOWN
など。
しかし、たとえば、 を継承しないクラスを作成し、class Control
このクラスがイベントを発生させた場合はどうなるでしょうか。
(これも継承しない別のクラスがそれをclass Control
受け取ります)
発生したイベントはメッセージ ループを通過しますか?
それほど論理的ではないように聞こえます..
(ただし、プロジェクトが Windows フォーム プロジェクトであり、2 つのクラスだけであると仮定します。送信者と受信者は GUI クラスではなく、作成した単純なクラスです)
コードの背後にあるメカニズムに関する説明や記事へのリンクは、高く評価されます。
c# - [名前を付けて保存] ダイアログが送信者をブロックするのはなぜですか?
私のプログラムの目的は、メモ帳のメニューの[名前を付けて保存]項目を介して、メモ帳の[名前を付けて保存]ダイアログをトリガーすることです。
上記のコードを実行すると、メモ帳の [名前を付けて保存] ダイアログが表示され、コンソールに "Done!" というログが記録されます。ユーザーが [保存] ボタンをクリックするまで。なぜ私のプログラムは待たなければならないのですか? それを避ける方法は?