事件对象跟全局变量的区别

事件对象和全局变量的区别
不太了解事件对象的优势在哪里。

我随意敲点代码示意:

// 情况一:使用 事件对象来操作:************************************************
HEVENT hEvent = CreateEven(NULL, FALSE, FALSE, NULL);
.....
// 在线程里头:
while(true)
{
  WaitForSingleObject(hEvent, INFINIT);
  // 进行我的处理
  .......
}
.....
//在响应某消息 WM_XXX中:
SetEvent(hEvent);


// 情况二:使用全局变量来操作:*******************************************************

BOOL g_bFlag = FALSE;
.......
// 线程中:
while(true)
{
   if(g_bFlag)
   {
      g_bFlag = FALSE;
      // 进行我的处理
      .....
   }
   else
     Sleep(10);
}
.....
// 响应某消息中:
g_bFlag = TRUE;



问题:
    我在第二种情况中,模拟事件对象来驱动线程操作,只是使用一个全局变量而已。
    那么,事件对象的优势到底在哪里?
    鄙人浅薄,请各位不吝赐教。谢谢!
------解决方案--------------------
全局变量操作不是原子操作,event是可以保证原子操作的。
原理上全局变量是会出现多个线程同时进入的情况的。
------解决方案--------------------
1)事件,可以同步;
全局变量,只能用于指示状态;
不具有线程同步功能。
即使是BOOL,也不是一条指令,就改变的。

2)全局变量,代码是全速运行,循环检查状态,属于忙等待;
   CPU处于空忙状态,没有做任何事情,但是一直在忙。
   
   事件锁住以后,线程挂起,不在执行代码。
   属于空闲等待。在此期间,其它线程可以做任何事,不受等待线程的影响。

忙等待一直占用CPU;
空闲等待,只有等待时候,不占用CPU。 

全局变量,需要循环检测,所以一直在运行;
响应速度快,但是由于空忙,效率太低。
  
事件挂起线程,需要线程切换,才能重新执行,响应速度慢;
但是,由于,不占用CPU时间,可以给其他,需要CPU的线程,让出CPU;
CPU利用率高,所以代码效率高。