2012-12-18 81 views
-1

獲得了兩個使用AfxBeginThreads啓動並且如圖所示同步的線程。如何使用Createevent,SetEvent..etc來正確地同步它們?我可以看到調用每個事件的實際代碼順序嗎?它似乎工作,但可能不是正確的實施。正確同步兩個線程

volatile unsigned char r = 0; 

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

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

回答

0

你的問題離開不清楚究竟正在努力實現的目標:做thread1只寫一次,並只讀取一次thread2?還是thread1不斷寫,而thread2不斷讀取?

您可能想要查看對維基百科Producer-Consumer problem的描述。該頁面甚至包含一個C++實現(它使用新的C++ 11功能,因此您可能無法編譯它),這應該讓您瞭解如何使用MFC和Win32 API實現此功能。

你也可以在CodeProject上檢出Using Semaphores: Multithreaded Producer/Consumer。本文提供了一個使用Windows API函數的實現,並很好地解釋了這種情況。

我希望這有助於。

+0

寫入和讀取是連續的。緩衝區是環形緩衝區的一部分。 – user783927

+0

然後,我認爲你應該閱讀我提供的鏈接。兩者都會給你如何去實現這個好主意。 –