设为首页 加入收藏

TOP

windows多线程编程星球(一)(六)
2017-10-11 18:24:43 】 浏览:736
Tags:windows 线程 编程 星球
,然后更新自己的resource信息并显示,所以在main的循环中加入如下的代码:

 while(true)
    {
        PlanetSpin(homePlanet,80,nSpinType);  
        nSpinType++;
        DWORD dStatus = WaitForSingleObject(hEvent,500);
        if ( dStatus == WAIT_OBJECT_0 )
        {
            homePlanet.resource -= 1;
            UpdatePlanetResource(homePlanet);
            // ResetEvent(hEvent); If the senconde para. is TRUE
        }
    } 

 

        在wait函数中,如果等到了激活态的event,homeplanet的resource将会减一,同时更新显示resource。因为我们设置的event的auto reset,所以这里不需要调用resetevent再将其变成非激活状态。这里的resource虽然也是一个全局的资源,但是因为使用event进行了控制,所以在这里不需要mutex之类进行同步。这种event的控制,通知机制可以很好处理此类问题。

【更多】这一次我想扯的是CreateEvent和CreateMutex的第一个参数,无论在这两个里面哪一个,我们都是传递的NULL。首先看一下这里的NULL的含义是这样的:一个指向SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否可被子进程继承。如果lpEventAttributes是NULL,此句柄不能被继承(百度里复制的)。NULL还有一个含义就是这个对象获得默认的access rights,那么到底什么是access rights呢?windows有安全模型,这个模型规定用户去访问这些内核对象的权限,比如mutex,event还有后面要介绍的semaphore以及其他等等,如果有兴趣,请看这个https://msdn.microsoft.com/zh-cn/data/aa374876(v=vs.100)   ,又是一个值得深入了解的知识。用简单的话说,这个模型里面规定了一些权限,比如说SYNCHRONIZE允许该对象可以做同步,允许一个线程可以等待直到这个对象编程激活状态,关于这个其实是一个非常非常值得深入了解的知识,其中涉及的ACLs,DACL,SACL等等,了解这个可以对windows怎样控制安全有一定的帮助,我建议可以看看https://msdn.microsoft.com/en-us/library/windows/desktop/ms686670(v=vs.85).aspx

         到目前为止的代码我都放在https://github.com/rogerzhu0710/MyTheWorld/ 这里了。

首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇win7如何恢复以前的ie版本 下一篇在IE中解决当前安全设置不允许下..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目