問題タブ [waitforsingleobject]
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.
c++ - WaitForSingleObjectが無効なハンドルを与える
WaitForsingleobjectが無効なハンドルを返しますが、理由がわかりません...
windows - VB6 でさらにコードを実行する前に、シェル プロセスが終了するのを待つ方法
Shell
コマンドを使用してプログラムを実行する小さなVB6アプリがあります。プログラムの出力をファイルに保存しています。次に、このファイルを読み取り、VB6 の msgbox を使用して出力を画面に表示します。
これは私のコードが今のように見えるものです:
問題は、VB プログラムが msgbox を使用して印刷している出力が、ファイルの古い状態であることです。以前の状態ではなく、出力ファイルの正しい状態を取得するために、シェル コマンド プログラムが終了するまで VB コードの実行を保留する方法はありますか?
c# - WaitForSingleObject(ハンドル、INFINITE)を殺すことは可能ですか?
INFINITE タイムアウトで WaitForSingleObject() を使用するアプリケーションを閉じる際に問題が発生しています。
全体像はこれです。アプリケーションがデバイスのウェイクアップ イベントを処理できるように、次のことを行っています。
イベントを次の方法で登録します。
待機する新しいスレッドを開始します。
次に、ターゲット メソッドで次の操作を行います。
予想通り、WaitForSingleObject が待機し続け、アプリを適切に閉じることができない場合、アプリケーションを閉じようとするまで、これはすべて正常に機能します。一度に実行できるアプリのインスタンスは 1 つだけで、起動時にこれを確認します。デバイスがソフト リセットされるまで動作し続けるように見えます。
WaitForSingleObject が待機しているハンドルを強制終了して強制的に返す方法はありますか?
どうもありがとう。
c++ - ミューテックスがブロックされていない Visual C++ スレッド
VC2005 で開発していますが、スレッドに問題があります。
キューからデータをデキューして送信するスレッドがあります。しかし、このスレッドは 1 つの請願を送信し、応答が新しい請願を送信するのを待つ必要があります (無限のタイムアウトを防ぐためにタイムアウトを設定したい)。
次のようなスレッドがあります。
しかし、この WaitForSingleObject は決して停止しません...私は次のようにイベントを初期化しました:
アイデアは、スレッドをブロックしてデータの送信を停止し、応答が来たら、このスレッドのブロックを解除して新しい請願を送信することです...なぜ停止しないのですか?
よろしく
c++ - SendMessageとPostMessage+WaitForSingleObject
SendMessage(ブロックする)を呼び出すことと、WaitForSingleObjectと組み合わせてPostMessageを呼び出すことの違いは何だろうと思っていました。考え?
c++ - zippy32.exeの実行中に、スレッドハンドルを持つWaitForSingleObjectがスタックします
スレッドAがWaitForSingleObjectを使用してスレッドBが終了するまで待機しているのではなく、別のスレッドBを作成しているスレッドAがあります。
問題は、スレッドBがスレッドの「thread_func」から戻っても、スレッドAが通知されないことです。。
thread_func(スレッドBのメイン関数)の最後にトレース(OutputDebugString)を追加し、スレッドBが実行を終了したことがわかりますが、スレッドAがWaitForSingleObjectから出ることはありません。
ここで、このコードがCOMオブジェクトにあることも追加する必要があります。また、上記のシナリオは、zippy32.exeを呼び出しているときに発生しているため(スタックします!)、スレッドAはDLLMainから来ていると思います。
スレッドAが通知されない理由はありますか?!?!
c - cスレッド関数の戻り値を取得し、UIスレッドがスタックしました
button1というボタンをクリックしたときにすぐに戻らない何かを行うためにスレッドを使用したかったの は、ここに私のコードです:
thread1
プロトタイプ:
ボタン 1 (ID:IDC_BUTTON1) をクリックした後、UI スレッドが約何時間スタックしてSleep
いました。を使用しない場合WaitForSingleObject
、exitCode
常に 259(STILL_ALIVE) を返しますか?
thread1
UI スレッドがスタックできませんでした の戻り値を取得するにはどうすればよいですか?
編集
使用PostThreadMessage
:
および の新しいメッセージDlgProc
:
mainThreadId
UI スレッド ID です。
のthreadProc
WM_FINISHED_FETCH
決してトリガーされないコード。
c++ - WaitForSingleObjectおよびC/++でのwhileループ
スニペットは次のとおりです:prog1:
prog2:
問題>半無限ループにはなりません...一度入るとそれだけです。
目的?一部のプロセスのアクティビティを監視するには(クラッシュした場合は再起動します)、無限ループがCPUに大きな打撃を与え、Sleepを使用できないため、asaspで再起動する必要があります(while(1)またはfor( ;;)投稿してください)
アップデート
while(WaitForSingleObject(hM、INFINITE)== WAIT_ABANDONED){...}である必要がありますが、正しくコピーしませんでした:)。
一度動作すると再び待機しなくなりますが、ハンドルをリセットする方法はありますか?
prog1:
prog2:
誰かがこの投稿に何かコメントを追加したい場合は、このように機能します。
multithreading - 私の DirectShow プッシュ ソース フィルターのこの Windows スレッド同期戦略は (かなり) 防弾ですか?
DSPACK コンポーネント ライブラリを使用して、Delphi 6 で記述された DirectShow プッシュ ソース フィルタがあります。プッシュ ソース フィルターの FillBuffer() 呼び出しのブロック戦略を実装しています。プッシュ ソース フィルターは、バッファーのコレクションに格納されている 1 つ以上のバッファーにオーディオ データを受け取ります。バッファー コレクション内のすべてのメソッドは、クリティカル セクションによって保護されます。
コレクション内の各バッファーには異なるソースからデータが供給されており、各ソースには独自のスレッドがあります。FillBuffer() 呼び出しは、呼び出し元に返されるマージされたバッファーを形成するためにデータが混合されるため、FillBuffer() が提供するように要求されたデータの量を満たすのに十分なデータがコレクション内のすべてのバッファーになるまでブロックされます。
これが、競合状態とデッドロックを回避するために私が考案した戦略です。バッファ ストレージ コレクションには、これを行うisEnoughData()というメソッドがあります。
- コレクション内の他のすべてのメソッドを保護している同じクリティカル セクションを取得します。
- 各バッファーのチェックを繰り返して、各バッファーに現在の要求を満たすのに十分なデータがあるかどうかを確認します。
- 十分なデータがある場合、TRUE を返します
- 十分なデータがない場合、ブロックを容易にするために使用されるMutexを取得し、FALSE を返し、FNumPendingBytesRequested に満たすことができなかった要求されたバイト数を格納します。
- もちろん、戻る前にクリティカルセクションを解放します。
FillBuffer() は次のことを行います。
- isEnoughData() を呼び出します
- TRUE が返された場合は、混合 (マージされたバッファー) データが提供されたサンプルで呼び出し元に返されます。
- FALSE の場合、上記のisEnoughData()呼び出し中にコレクションによって取得されたMutexで WaitForSingleObject() を実行し、十分なデータが表示されるまでブロックします。Mutexを取得すると、コレクションからデータを取得して呼び出し元に返し、Mutexを解放します。
コレクション内の任意のバッファーにデータを追加するストレージ コレクション内のすべてのメソッドは、戻る前に FNumPendingBytesRequested を満たすことができるかどうかを確認します。その場合、Mutexが解放され、それによって FillBuffer() 呼び出しのブロックが解除され、データが取得されて返されます。当然のことながら、コレクションは破棄されるとMutexを解放します。
これは私にはかなり防弾のようです。isEnoughData() への FillBuffer() 呼び出しと、コレクションにデータを追加する他のスレッドとの間の競合状態から適切に保護すると思います。また、競合状態やデッドロックが発生する可能性のある場所もわかりません。私はこれで正しいですか?戦略に関するヒントや注意事項も大歓迎です。
大きな問題: 私が見ることができる唯一の潜在的な問題点は、FillBuffer() がWaitForSingleObject()を呼び出してブロックする前にMutexを解放するのに十分なデータを別のスレッドが追加するかどうかです。しかし、私の理解では、誰も所有していない同期オブジェクトでWaitForSingleObject()を呼び出すと、オブジェクトの所有権がすぐに返されるため、必要なデータが利用可能になったことを意味するため、問題にはなりません。私の理解は正しいですか?