1

VC2005 で開発していますが、スレッドに問題があります。

キューからデータをデキューして送信するスレッドがあります。しかし、このスレッドは 1 つの請願を送信し、応答が新しい請願を送信するのを待つ必要があります (無限のタイムアウトを防ぐためにタイムアウトを設定したい)。

次のようなスレッドがあります。

while (true){
    dequeue()
    send()
    WaitForSingleObject(ptClass->getMutex(),10000);
}

しかし、この WaitForSingleObject は決して停止しません...私は次のようにイベントを初期化しました:

    HANDLE ghMutex = CreateEvent(NULL,FALSE, FALSE, "");

アイデアは、スレッドをブロックしてデータの送信を停止し、応答が来たら、このスレッドのブロックを解除して新しい請願を送信することです...なぜ停止しないのですか?

よろしく

4

1 に答える 1

1

あなたが持っているこのスレッドは、イベントがSETされて通知されるのを待っているので、再び起こすことができます。SetEventを使用してイベントをシグナル状態に設定する必要があります。あなたのアーキテクチャがわからないので、どこでそれを行うのかわかりませんが、それが欠けています。

WaitForSingleObject はスレッドを CPU コンテキストから外していますが、再び起動されていません。

イベントがシグナル状態に設定されるまで待つ必要があり、それがすぐに発生することを保証できない場合は、Wait のタイムアウトを INFINITE に設定する必要があります。

ミューテックスを使用しておらず、AutoResetEvent を使用していますが、設定する必要があります!

于 2011-05-25T10:57:13.783 に答える