2012-12-18 50 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

然后,我认为你应该阅读我提供的链接。两者都会给你如何去实现这个好主意。 –