网络应用高级编程_第1章_进程、线程与网络协议.ppt_第1页
网络应用高级编程_第1章_进程、线程与网络协议.ppt_第2页
网络应用高级编程_第1章_进程、线程与网络协议.ppt_第3页
网络应用高级编程_第1章_进程、线程与网络协议.ppt_第4页
网络应用高级编程_第1章_进程、线程与网络协议.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C#编程三剑客,C#网络应用节目编程基础玛俊主编基本知识部分,初学者应用。C#网络高级程序设计马俊、郑凤彬、沈重型编制高级程序设计部分,适用于高级开发人员。C#网络应用节目编程开发实例和实验地图马俊编制了机械问题和项目开发实例(从设计到安装软件制作)。C#网络应用程序高级编程、第一章流程、线程和网络协议、1.1流程和线程1.2 IP地址和通信端口1.3插槽1.4网络流、1.1流程和线程,流程是静态命令序列(节目)的动态执行流程,是系统资源分配和调度的基本单元。流程相关信息包括:流程的用户标志、正在运行的编译节目、流程节目和数据在存储中的位置。同一进程可以划分为多个单独的执行流,称为线程。线程可

2、以看作进程的实例,是CPU调度和分配的基本单元。在Windows环境中,运行的每个应用程序可以同时运行多个应用程序(进程)。1.1进程和线程(继续)、并行处理的主要特征:并行处理可以通过在单个处理器系统上分时处理来实现并发性,并且为每个线程分配CPU时间片。每个线程仅在分配的时间片内控制CPU,其他时间等待。System。Diagnostics命名空间下的Process类1.1.1 Process类用于完成系统进程的管理任务。您可以在本地计算机上启动和停止进程,或查询进程以获取特定类型的信息。无法在远程系统上启动和停止进程,但可以查看有关进程的相关信息。操作过程时,必须首先创建Process类

3、的实例,设置对象成员的StartInfo属性,最后调用其Start方法。是。启动、停止和观察进程,1 .创建名为ProcessExample的新Windows应用程序。2.将流程组件从工具箱拖放到设计表格。3.添加命名空间:using System。诊断;诊断。Using System。Threading4.启动记事本、停止记事本、查看所有流程按钮,然后添加Click事件代码private void button start _ Click(object sender,ever)/notepad . exe流程process1。启动Start(),创建private void button s

4、top _ click(object sender,eventargse)/新Process组件的数组,然后创建指定的进程名(Notepad)process instance in my processes(foreach)/在终止当前线程之前1000毫秒的instance。设置为等待WaitForExit(1000)。Instance。CloseMainWindow();private void button view _ click(object sender,eventargs e)listbox 1 . items . clear();/Process类型的数组,以创建系统中的所有进程

5、和相关,Process processesProcesses=Process。get processes();访问进程中(Process p in processes,Process p in processes) /Idle的StartTime出现异常,从而导致if (p.ProcessName!=Idle) /将每个进程名和进程开始时间添加到listBox1的this . listbox 1 . items . add(string . format(0,-3013360h :m 33660m)中,1.1.2在Threading命名空间中,Thread类用于创建和控制线程,线程常用的操作包

6、括启动线程、终止线程、合并线程和休眠线程。在使用开始线程线程之前,必须先创建线程。典型格式为Thread t=new Thread(enterPoint)。其中enterPoint是螺纹的入口,即螺纹开始执行的方式。在管理代码中,通过委托处理线程执行的代码。例如:thread t=new thread(new thread start(method name);创建线程实例后,可以调用Start方法启动线程。,1.1.2 Thread类(继续),如果在结束线程启动后不需要运行线程继续,则必须终止线程。结束线程调用Thread类的Abort方法。例如,t .abort();Abort方法没有参数

7、。调用Abort方法时,可能不会立即终止CLR牙齿线程。主线程调用子线程的Abort方法时,终止子线程需要大量CPU时间,并且表面看起来崩溃。要解决牙齿问题,可以在主线程中调用子线程对象的Join方法,在Join方法中,指定主线程等待子线程结束的等待时间。1.1.2 Thread类(继续),合并线程Join方法用于将两个并行执行线程合并为单个线程。如果需要在一个线程t1牙齿运行期间等待另一个线程T2结束,然后继续运行,则可以在t1中调用T2的join()方法。范例:t2。join();这将阻止t1牙齿继续运行,直到t2.join()语句运行后t2结束。要解决T2未结束的问题,可以在调用T2的J

8、oin方法时指定等待时间。例如: t2。join(100);Join方法通常与Abort一起使用。1.1.2 Thread类(继续),使多线程应用程序挂起线程。在某些情况下,您希望一个线程停止运行一段时间,等待另一个线程运行,然后重新运行,而不是继续运行。此时,可以调用Thread类的Sleep方法以休眠线程。例如,Thread .sleep(1000);牙齿语句的功能是使当前线程休眠1000毫秒。调用Sleep方法不是类实例,而是类本身。休眠是具有语句而不是其他线程的线程。1.1.2 Thread类(继续)、线程优先级C#应用程序中可以为线程设置五个茄子优先级:Highest、AboveNo

9、rmal、Normal、BelowNormal、low等。如果在创建线程时没有指定优先级,系统将默认设置为Normal要确保某些重要线程优先运行,可以使用thread t=new thread(new thread start(enterpoint)方法授予高优先级。t . priority=thread priority . abovenormal;设置线程的优先级将更改线程的执行顺序,设置的优先级仅应用于该线程所属的进程。将线程优先级设置为Highest将停止系统上运行的其他线程。1.1.2 Thread类(继续)、线程池线程池是多线程处理形式,可为线程生命周期的开销和资源不足问题提供良好

10、的解决方案。在多个操作中重用线程会将创建线程的开销分布在多个操作中。线程池适用于需要多个线程但实际执行时间不多的情况。但是,如果线程需要运行更长的时间,则在牙齿点,线程运行的时间比线程创建时间长得多。通过减少线程的生成时间提高系统效率不是很明显。此时,线程池技术1.1.2 Thread类(继续),同步意味着一次只能有一个线程访问变量或对象。使用C#提供的lock语句锁定variable1,这样在处理线程t1牙齿variable1时,其他线程也不会工作。实现代码为lock (variable1)。Variable1=1注意:不要将同步的对象声明为public。是。在程序中使用线程,1 .建立名为

11、ThreadExample的新Windows应用程式。2.将计时器组件拖放到设计表单上。3.命名空间:using System。Threading4.字段宣言:string builder sb=new string builder();Thread thread1Thread thread25.代码:private void appendstring(strings)lock(sb),str . append(s);public void method 1()while(true)thread . sleep(100);/线程休眠100毫秒append string(a);Public vo

12、id method2 () while (true),thread . sleep(100);/线程休眠100毫秒append string(b);6.将代码添加到“开始线程”和“结束线程”按钮的Click事件中。private void button start _ click(object sender,eventargs e) sb.remove (0,sb.Timer1 .Enabled=truethread 1=newthread(newthreadstart(method 1);thread 2=newthread(newthreadstart(method 2);Thread1

13、.start();thread2。start();private void button abort _ click(object sender,eventargs e)thread 1 . abort();Thread1 .join(10);Thread2 .abort();Thread2 .join(10);7.timer1的Tick事件代码:private void time R1 _ Tick(object sender,eventargs e)if(thread 1 . is alive=true Else timer 1Enabled=false键编译和执行,单击启动线程,稍后,单

14、击终止线程,以查看执行结果。1.1.3为了防止一个线程中另一个线程的控件操作,默认情况下死锁等不安全因素,C#不允许一个线程中另一个线程的控件直接操作。但是,在Windows应用程序中,可能需要经常从一个线程引用另一个线程的西餐控件,以便在表单中显示线程处理的信息。比较常见的方法是使用“委派”(delegate)完成牙齿操作。是的。一个线程执行另一个线程的控件操作的方法。1.2 IP地址和通信端口,以及网际协议(IP),是在网络网络设备之间传输数据的协议。牙齿部分中介绍的端口是逻辑端口,但表示TCP/IP协议中的端口。牙齿部分包括IPAddress、IPHostEntry、IPEndPoint

15、等System。简要介绍了Net命名空间中的几个茄子类。1.2.1 TCP/IP网络协议、网络协议TCP/IP IP地址、1.2.2 IPAddress类和Dns类;IP address类提供IP地址转换、处理等功能。Parse方法将IP地址字符串转换为IPAddress实例。例如:IP address IP=IP address . parse( 192 . 168 . 1 . 1 );IPAddress类别提供7个唯读栏位。 Any表示本地系统上所有可用的IP地址。Broadcast表示本地网络IP广播地址。IPv6Any Socket。Bind方法使用牙齿字段表示本地系统上可用的IP地址

16、。IPv6Loopback表示系统的环回地址。IPv6None表示在系统中不可用。网络介面Loopback表示没有系统的环回地址。None表示系统中没有可用的网络接口。1.2.2 IPAddress类和Dns类(继续)、Dns类提供了一系列静态方法,用于提供本地或远程域名等功能。典型的方法是1) gethostosts,函数基本体是public static IP address gethostaddresses(string hostnameoraddress)。例如:IP address IP=DNS . gethostaddresses();ListBox1。items . add range(IP);2) GetHostName方法获取本机主机名。例如,string hostname=Dns。GetHostName();1.2.3 IPHostEntry类,其中IPHostEntry类的实例对象包含有关网络主机的信息。常用属性是AddressList属性和HostName属性。获取或设置与AddressList属性角色:主机关联

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论