猿问

为什么会输出很多的a啊?

如果有一个这样的语句
HANDLE mutex = CreateMutex(NULL,false,NULL); 
while(true)
{
WaitForSingleObject(mutex,INFINITE);
cout<<"a"<<endl;
}
不是第二次到WaitForSingleObject(mutex,INFINITE);就会等在这里了么

慕村225694
浏览 70回答 2
2回答

蛊毒传说

当另一个线程一直占着mutex的时候才会等待&nbsp;#include <windows.h>#include <process.h>HANDLE mutex = NULL;unsigned int _stdcall threadfun( void* o ){while( true ){WaitForSingleObject(mutex,INFINITE);printf( "press key\n" );getchar(); //当这里一直占着的时候,主线程就一直等,直到这里releasemutexReleaseMutex( mutex );}return 0;}int main( int argc, char** argv ){mutex = CreateMutex(NULL,false,NULL);&nbsp;_beginthreadex( NULL, 0, threadfun, 0, 0, 0 );while(true){WaitForSingleObject(mutex, INFINITE);printf( "me\n" );ReleaseMutex(mutex);}return 0;}

翻翻过去那场雪

当singleMutex被触发后才会继续执行,否则会一直等待。WaitForSingleObject是windows的一个API:1 函数声明:DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);2 函数说明:hHandle[in]对象句柄。可以指定一系列的对象,如Event、Job、Memory resource notification、Mutex、Process、Semaphore、Thread、Waitable timer等。dwMilliseconds[in]定时时间间隔,单位为milliseconds(毫秒).如果指定一个非零值,函数处于等待状态直到hHandle标记的对象被触发,或者时间到了。如果dwMilliseconds为0,对象没有被触发信号,函数不会进入一个等待状态,它总是立即返回。如果dwMilliseconds为INFINITE,对象被触发信号后,函数才会返回。
随时随地看视频慕课网APP
我要回答