0

Cで2つのプログラム(プロデューサーとコンシューマー)を作成し、メッセージを相互に送信します(CreateEvent、SetEvent、およびWaitForSingleObjectを使用)

各プログラムに 1 つのスレッドを実装して、メッセージを待機する WaitForSingleObject(myEvent, INFINITE) を使用してこのメ​​ッセージを管理します

WaitForSingleObject をループに入れて繰り返し、時間内に多くのメッセージを取得します。

これは最初は正常に機能しますが、それ以外の場合は WaitForSingleObject がメッセージを待機せず、左のコードが無限ループで実行されます (WaitForSingleObject を再度含む)。

2 つのプログラムの両方で CloseHandle(myEvent) を削除することをテストしましたが、結果はありませんでした

do {
//wait until the event received from another process
WaitForSingleObject(myrcvEvent, INFINITE);

//send the feeback event, if it is failed show a message
printf ("consumer: try to send the feedback event\n");
if (!SetEvent(myfeedbackEvent)) {
msgbox("consumer: Set feedbackEvent failed!");
        return;
 } else {

InvalidateRect(hWnd,NULL,TRUE); //redraw with new values
 }


//CloseHandle(myrcvEvent);
//CloseHandle(myfeedbackEvent);

Sleep(100);
} while(1);

なにが問題ですか?ありがとう

4

1 に答える 1

0

なぜこれにイベントを使用しているのですか?セマフォを使用 - CreateSemaphore() API。

このシグナリングに (不適切な) イベントを使用している場合でも、1 つのプロデューサー、1 つのコンシューマー、および自動リセット イベントの症状として継続的なループが発生することは期待できません。コードを投稿してください。

于 2012-07-22T22:07:15.397 に答える