-1

AfxBeginThreads を使用して開始され、示されているように同期された 2 つのスレッドを取得しました。Createevent、SetEvent などを使用してそれらを適切に同期する方法は? 各イベントを呼び出す実際のコードの順序を確認できますか? 動作しているように見えますが、正しい実装ではない可能性があります。

volatile  unsigned char r = 0;

    DWORD thread1(Lpvoid ...)
    {
        WritetoBuffer
        r=1;
    }

    DWORD thread2(Lpvoid ...)
    {
        if(r==1)
        ReadsBuffer
        r=0;
    }
4

1 に答える 1

0

あなたの質問は、あなたが達成しようとしていることを正確に不明のままにしますthread1.1回だけ書き込み、1回thread2だけ読み取りますか? それとも、常に読み取りthread1ながら、常に書き込みますか?thread2

ウィキペディアで生産者と消費者の問題の説明を確認することをお勧めします。このページには、MFC と Win32 API を使用してこれを実装する方法についてのアイデアを提供する C++ 実装 (新しい C++11 機能を使用するため、コンパイルできない場合があります) も含まれています。

また、CodeProject のUsing Semaphores: Multithreaded Producer/Consumerもご覧ください。この記事では、Windows API 関数を使用する実装を提供し、状況を非常によく説明しています。

これが役立つことを願っています。

于 2012-12-20T11:44:56.397 に答える