欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第1章__网络编程基础1.ppt

    • 资源ID:87667892       资源大小:1.39MB        全文页数:19页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第1章__网络编程基础1.ppt

    1Traffic Engineering 1999,Cisco Systems,Inc.网络软件技术网络软件技术郭庆北郭庆北郭庆北郭庆北 ise_ ise_ 网络编程基础网络编程基础多线程多线程2第一章第一章第一章第一章 网络编程基础网络编程基础网络编程基础网络编程基础多线程多线程多线程多线程1.多线程技术简介多线程技术简介2.线程线程API3.线程对象操作线程对象操作31.1 1.1 多线程技术简介多线程技术简介多线程技术简介多线程技术简介进程:进程:是对一段静态指令序列(程序)的动态执行过程。进程是系程是系统进行行资源分配和源分配和调度的基本度的基本单位位进程相关信息:用程相关信息:用户标识、正在、正在执行的已行的已经编译好的程序、程序和数据在存好的程序、程序和数据在存储器中的位置等器中的位置等4线程:线程:同一个进程又可以划分为若干个独立的执行流,称为线程。线程可以看作是进程的一个实例。在Windows环境下,用户可以同时运行多个应用程序,每个执行的应用程序就是一个进程。线程是程是CPU调度和分配的基本度和分配的基本单位位并并发处理理5为为什么什么线线程程是网是网络编络编程程的基的基础础?6多线程带来如下好处:多线程带来如下好处:1 1)避免瓶颈;)避免瓶颈;2 2)并行操作;)并行操作;3 3)提高效率;)提高效率;在多线程中,通过优先级管理,可以使重要的程在多线程中,通过优先级管理,可以使重要的程序优先操作,提高了任务管理的灵活性。序优先操作,提高了任务管理的灵活性。另一方面,在多另一方面,在多CPUCPU系统中,可以把不同的线程在系统中,可以把不同的线程在不同的不同的CPU CPU 中执行。中执行。7请注意:多线程不能滥用。请注意:多线程不能滥用。81.2 1.2 线程线程线程线程APIAPI一、一、创建线程创建线程HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);lpThreadAttributes:指定安全参数,当前进程创建的进程(子进程):指定安全参数,当前进程创建的进程(子进程)是否继承该句柄也由此参数确定,如不需控制可指定为是否继承该句柄也由此参数确定,如不需控制可指定为NULL。9dwStackSize:线程的堆栈大小,以字节为单位,该值上:线程的堆栈大小,以字节为单位,该值上取整到与其最接近的页面大小。如为取整到与其最接近的页面大小。如为0,则默认为调用线,则默认为调用线程的堆栈大小。程的堆栈大小。lpStartAddress:指向一个线程实际运行代码的:指向一个线程实际运行代码的函数指针函数指针,原型为原型为DWORD WINAPI ThreadFunc(LPVOID data)。lpParameter:传递给线程函数的数据值。:传递给线程函数的数据值。dwCreationFlags:创建标志,如创建后立即执行还是挂:创建标志,如创建后立即执行还是挂起。起。lpThreadId:线程:线程ID的地址。的地址。10二、终止线程二、终止线程(1)Void ExitThread(DWORD dwExitCode)(2)线程函数)线程函数ThreadFunc()退出退出。(3)ExitThread会导致线程在清除构造器之前退出,因此会导致线程在清除构造器之前退出,因此不建议使用。不建议使用。11三、三、创建事件函数:创建事件函数:HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,LPCTSTR lpName);bManualReset:是否由程序员调用:是否由程序员调用ResetEvent函数对创建的事件进行函数对创建的事件进行显式复位。显式复位。bInitialState:指定事件是否为激发状态。:指定事件是否为激发状态。lpName:事件的属性。:事件的属性。12四、等待事件触发函数四、等待事件触发函数DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);hHandle:事件句柄。:事件句柄。dwMilliseconds:超时时间,为:超时时间,为0则立即返回。则立即返回。#include stdafx.h#include Windows.htypedef structint nID;HANDLE hEvent;ThreadArgs;DWORD WINAPI ThreadFunc(LPVOID data)HANDLE hEvent=(ThreadArgs*)data)-hEvent;int nID=(ThreadArgs*)data)-nID;while(true)if(WaitForSingleObject(hEvent,0)=WAIT_OBJECT_0)printf(终止线程:终止线程:%d,nID);ResetEvent(hEvent);break;Sleep(1000);return 0;int _tmain(int argc,_TCHAR*argv)ThreadArgs Threads10;HANDLE hHandle10;DWORD dwID10;for(int i=0;i 10;i+)/创建创建10个线程个线程Threadsi.nID=i;Threadsi.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);hHandlei=CreateThread(NULL,0,&ThreadFunc,&Threadsi,0,&dwIDi);printf(终止一个线程,请按数字键终止一个线程,请按数字键-9,然后按,然后按键:键:n);printf(按其它任意键退出!按其它任意键退出!n);while(true)char c=getc(stdin);if(c=n)continue;if(c 9)break;SetEvent(Threadsc-0.hEvent);return 0;151.3 1.3 线程对象操作线程对象操作线程对象操作线程对象操作一、线程的创建:一、线程的创建:MsgThread:=TMsgThread.Create(False);/创创建并建并执执行行线线程程MsgThread:=TMsgThread.Create(True);/创创建建线线程程后挂起后挂起constructor Create(CreateSuspended:Boolean);中的中的参数参数CreateSuspended表示表示创创建后是否挂起建后是否挂起线线程程16二、挂起线程:二、挂起线程:Suspend(把线程挂起的次数加一)(把线程挂起的次数加一)三、唤醒线程:三、唤醒线程:Resume(注意:注意这个属性是把线程挂起的次数减一,当次数(注意:注意这个属性是把线程挂起的次数减一,当次数为为0 时,即唤醒。也就是说,线程挂起多少次,唤醒也需时,即唤醒。也就是说,线程挂起多少次,唤醒也需要多少次。同时挂起的时候将保持线程的地址指针不变,要多少次。同时挂起的时候将保持线程的地址指针不变,所以线程挂起后再唤醒,将从挂起的地方开始运行)所以线程挂起后再唤醒,将从挂起的地方开始运行)17四、线程的终止和退出:四、线程的终止和退出:1)自动退出:自动退出:一个线程从一个线程从execute()过程中退出,即意味着线程的终止,过程中退出,即意味着线程的终止,此时将调用此时将调用WINDOWS的的exitthread()函数来清除线程所占函数来清除线程所占用的堆栈。用的堆栈。如果线程对象的如果线程对象的 freeonterminate 属性设为属性设为true,则线程,则线程对象将自动删除,并释放线程所占用的资源。对象将自动删除,并释放线程所占用的资源。这是消除线程对象最简单的办法。这是消除线程对象最简单的办法。182)受控退出:受控退出:利用线程对象的利用线程对象的terminate属性,可以由进程或者由其他线属性,可以由进程或者由其他线程控制线程的退出。只需要简单的调用该线程的程控制线程的退出。只需要简单的调用该线程的terminate方法,并设直线程对象的方法,并设直线程对象的terminate属性为属性为true。在线程中,应该不断监视在线程中,应该不断监视terminate的值,一旦发现为的值,一旦发现为true,则退出,例如在,则退出,例如在execute()过程中可以这样写:过程中可以这样写:while not terminate dobegin.end;19五、析构(清除线程所占用的内存)五、析构(清除线程所占用的内存)Destroy六、和六、和VCL同步同步访问访问VCL的属性或方法,只能在应用程序的主线程中访问,的属性或方法,只能在应用程序的主线程中访问,这也就意味着:任何访问或修改应用程序用户界面的代码这也就意味着:任何访问或修改应用程序用户界面的代码都应该在应用程序的主线程环境中执行。都应该在应用程序的主线程环境中执行。Synchronize();();

    注意事项

    本文(第1章__网络编程基础1.ppt)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开