在Win32平台中Event和Mutex用来完成互斥和同步的功能。不过我始终没有搞清它们的用法。哪位能给小弟说说?

解决方案 »

  1.   

    Event是一个线程通知另一个线程用的,是单向的。一方接收,其它方可以发送。一般用在单纯的同步上,就是一个操作要等待另一个操作完成时用的,双方地位并不平等。Mutex是用于资源控制用的,对于同一个资源,一次只能有一人可以对资源进行访问。双方的地位是平等的。Mutex比Event复杂一点,可以用Mutex实现Event的功能。对于楼上说的手动通知另一个进程同步,用Event就可以了。
      

  2.   

    用API:WaitForSigleObject,WaitForMultiObjects......
    使需要同步的线程阻塞,然后执行别的操作,根据需要激活事件或信号或互斥等对象,阻塞的线程接到通知将继续执行
      

  3.   

    要手动改变事件状态,在创建CreateEvent时,要指定bManualReset为TRUE
    改变状态用SetEvent;ResetEvent;
    《WIN32多线程程序设计》上讲的很清楚,建议你去买一本,很有用。
      

  4.   

    这对WIndows编程很重要的!CRITICALSECTION、Mutex、event还有个信号,
    建议你仔细学学吧!
      

  5.   

    线程通讯在Windows编程是很重要的!4个对象
    CriticalSection,mutex,event还有个信号,
    4个重要函数WaittingForSingleObject,
    WaittingForMultiObject,
    WaittingForSingleObjectEx,
    WaittingForMultiObjectEx
    兄弟好好看看书吧!
      

  6.   

    MUTEX互斥(体)就是一个资源在同一时间只能被一个线程所访问
      

  7.   

    Mutex] 是互斥(体)就是一个资源在同一时间只能被一个线程所访问
    ::CreateMutex(NULL, TRUE, m_pszExeName);
      

  8.   

    给你举个简单例子吧(Event)
    首先用CreateEvent创建一个事件,然后有两个同时运行的线程:线程1                   线程2
    ......                  ......
    ......                  动作1
    ......                  ResetEvent(信号的初期化)
    动作2                   WaitForXXXXObject(等待动作2的结束)
    SetEvent(信号的改变)  动作3
    ......                  ......假如你想执行的流程是动作1--〉动作2--〉动作3,那么你就可以用上面的方法来进行同步控制了。Mutex的例子:
    首先用CreateMutex创建一个Mutex,然后存在一个在同一时间内只能运行一次的资源(可以是对象,代码段等等),那么互斥的代码就可以这么写:......
    OpenMutex(对资源加锁)
    资源1
    ReleaseMutex(对资源解锁)
    ......这样如果有好几个同时运行的线程都要用到资源1的时候,就可以调用
    上面的代码,来保证资源1的互斥执行了。
      

  9.   

    那么是说如果一个MUTEX对象已经被某个进程打开的话,另一个进程在调用OpenMutex时就会等到前一个进程释放后才会返回吗?
      

  10.   

    那么是说如果一个MUTEX对象已经被某个进程打开的话,另一个进程在调用OpenMutex时就会等到前一个进程释放后才会返回吗?
      

  11.   

    znormal(香烟与啤酒)帖子的订正:
    ......
    OpenMutex(对资源加锁)-〉WaitForSigleObject(对资源的加锁)
    资源1
    ReleaseMutex(对资源解锁)
    ......
    抱歉!