ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 操作系统 >> Windows 7jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播 >> windows多线程编程 windows多线程编程星球(一)

windows多线程编程 windows多线程编程星球(一)(8/8)

来源:网络整理     时间:2016-07-12     关键词:windows多线程编程

本篇文章主要介绍了"windows多线程编程 windows多线程编程星球(一)",主要涉及到windows多线程编程方面的内容,对于Windows 7jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 以前在学校的时候,多线程这一部分是属于那种充满好奇但是又感觉很难掌握的部分。原因嘛我觉得是这玩意儿和编程语言无关,主要和操作系统的有关,所以这...

        下面我们就要让子星球给母星球发送更新通知了,采用的函数是SetEvent,将event设置为激活状态,相当于给母星球发送一个通知,我们在子星球的PlanetMove里面加入如下代码:

void PlanetMove(struct Planet &p)
{  
    char cLine[100];
    memset(cLine,0,100*sizeof(char)); 

    if( p.resource < nMaxResource-1 ) 
    {
        p.resource++;
        memset(cLine,'-',p.resource*sizeof(char));
        MoveOutputToPos(0,p.index*3+1,cLine,true); 

        UpdatePlanetResource(p);
        SetEvent(hEvent);
    }  
}

          在更新resource状态之后将event设置为激活状态,此时母星球线程中的wait函数就会等到这个event,然后更新自己的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/ 这里了。

以上就介绍了windows多线程编程 windows多线程编程星球(一),包括了windows多线程编程方面的内容,希望对Windows 7jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播有兴趣的朋友有所帮助。

本文网址链接:http://www.codes51.com/article/detail_2557074_8.html

windows多线程编程相关图片

windows多线程编程相关文章