2

スレッド間でイベント ハンドルを共有しているアプリケーションがあります。これらのイベント ハンドルは、シリアル I/O の送信完了および受信データ通知をアプリケーションに通知するために使用されます。ハンドルは、クラス コンストラクターまたは への呼び出しの渡されたパラメーターとして新しいスレッドにコピーされますCreatThread。これは機能していると思いましたが、これらのイベントが適切に通知されていないように見える奇妙なバグに遭遇しました。DuplicateHandleこれに関数を使用する必要がありますか?もしそうなら、次の使用法は正しいでしょうか?

::DuplicateHandle(
    ::GetCurrentProcessId(),
    hMyHandle,
    ::GetProcessIdOfThread( hReceivingThreadHandle ),
    &hMyDupHandle,
    0,
    TRUE,
    DUPLICATE_SAME_ACCESS
    );

残念ながら、マルチスレッドのデバッグは難しいため、このバグについて 100% 確実なことは言えません。ありがとう。

4

2 に答える 2

2

既存のハンドルを使用するすべてのスレッドが同じプロセスにある場合、その API (DuplicateHandle) を使用する必要はありません。同じプロセス内のスレッドは、イベント、セマフォなどに同じハンドル値を使用できます。

于 2011-04-18T22:15:07.053 に答える
1

プロセス内の異なるスレッド間でイベント ハンドルを共有できます。あなたのバグは別の場所にあります。

于 2011-04-18T22:17:14.917 に答える