createmutex函数参数含义,createmutex函数用法

  createmutex函数参数含义,createmutex函数用法

  处理hMutex

  hMutex=:CreateMutex(NULL,FALSE,NULL);

  WaitForSingleObject(hMutex,INFINITE);//1

  WaitForSingleObject(hMutex,INFINITE);//2

  很多初学者认为设置为FALSE就意味着收不到信号。其实这是不对的。

  真正的理解是:

  CreateMutex()函数的第二个参数是FALSE,这意味着刚刚创建的互斥体不属于任何线程。

  也就是没有线程拥有他。当没有线程拥有他的时候,一个互斥体是处于兴奋状态,所以它是处于信号状态。

  调用:waitforsingleobject (hmutex,infinite)时;//1

  当这个线程得到互斥体时,互斥体从有信号变为无信号。

  调用:ReleaseMutex()就是把互斥体变成一个信号。

  等待线程结束

  功能原型是:

  DWORD WaitForSingleObject(HANDLE hHandle,DWORD dw milliseconds);

  HHandle是被监控对象的句柄(通常是同步对象或线程);

  dwMilliseconds为hHandle对象设置的超时值,以毫秒为单位。

  当函数在线程中被调用时,线程被暂时挂起,系统监控hHandle所指向的对象的状态。如果线程正在等待的对象在挂起的dwMilliseconds的毫秒内变为信号状态,函数将立即返回;如果超时已经达到dw毫秒,但是hHandle指向的对象还没有变成信号状态,函数还是会返回。参数dwMilliseconds有两个特殊值:0和INFINITE。如果为0,函数立即返回;如果为INFINITE,线程将被挂起,直到hHandle指向的对象变为信号状态。

  于是第一个:WaitForSingleObject()函数返回,释放线程对互斥体的所有权,互斥体又会变成激发态,导致第二个:WaitForSingleObject()函数返回!

  主要区别

  创建事件

  和

  创建互斥体

  不同之处。Mutex是互斥体,event用于事件通知。

  因为Mutex中的ReleaseMutex是这样设置的,没有线程拥有它,有信号;事件中的resetevent设置为无信号。

  奎哥哥:

  互斥体就是互斥体,一般用在一个程序只允许系统中有一个实例的时候。程序一启动,就会检测到这个互斥体。如果它显示程序已经在运行,它就退出。否则,它拥有这个互斥体并继续运行程序。

  事件一般用于通知,比如某件事做好了通知另一个线程,这里的另一个线程一般都在等待这个事件。

  互斥体保护关键部分。当然,你可以用它来等待事件,但是语义不同。

  它是流程的一个实例。比如记事本(假设),第一个记事本启动时没有创建互斥体,所以第一个记事本程序创建并拥有互斥体,然后显示UI。然后当第二个记事本启动时,发现互斥体已经存在,说明记事本已经在运行了,所以第二个记事本直接退出。这确保了系统中只有一个实例。

createmutex函数参数含义,createmutex函数用法