通过WaitforSigleObject()取得对象;
后用Sleep.
如WaitforSigleObject(**);
Sleep(10);
即然我取得了得了对象,为什么用Sleep(10);程序又会执行别的线程,
就像我进了拿着匙钥房间里,为什么别的人还可以进入房间。
各位,可不可以打个比方,说一下为什么呢?

解决方案 »

  1.   

    这里用sleep(10)没有必要,WaitforSigleObject里面可以设置等待时间参数
    WaitforSigleObject只会在一定的时间内等待一个事件的发生,当事件发生了或者超时,WaitforSigleObject函数都会返回,然后程序可以执行任何操作.
    如果你这么比较的话,那就是你在一定的时间内,可以拥有进入房间的权限,你退出房间或者过完了这段时间,房间的权限正常分配.
      

  2.   

    LZ没搞清出WaitforSigleObject函数是什么意思,建议搞清楚它先
      

  3.   

    handleMutex=::CreateMutex(0,false,NULL);
    CloseHandle(handleMutex);
    ****
    ::WaitForSingleObject(handleMutex,INFINITE);
    Sleep(1);
    我取得对象后才Sleep(1);即然我取得了对象,我又没有release(),当然是其它线程不能得了。但Sleep(1);后,为什么其它线程就可以取得呢?我是这样用的,
      

  4.   

    有点疑问:Create以后马上Close?
    CreateMutex中第二个参数为false的时候,the calling thread does not obtain ownership of the mutex,要达到你的要求,改为TRUe看看.
      

  5.   

    CPU时间片的分配是我们无法预知的,每个线程分配的时间也是不固定的,不能保证线程内每条语句都能顺序执行完,你都没用线程同步变量,如互斥变量,信号量等,这是不行吧!
      

  6.   


    WaitforSigleObject(**);//这个是用来同步的
    Sleep(10);//这个不是做同步用的,很可能是接下来你是做一直需要CPU的tasks,sleep一下可以降低performance.