c# 多线程

一、基本概念

1、进程:一个程序开始运行时,它就是一个进程。进程包括运行中的程序和程序所使用到的资源。而一个进程是由多个线程组成。

2、线程:线程是一个程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序寄存器等)。但是其程序代码区是共享的,即不同的线程可以执行同样的函数。

3、多线程:指的是程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。换句话说,就是允许单个程序创造出多个并行执行的线程来完成各自的任务。

4、任何程序在执行时,至少有一个主线程。

5、所有与多线程应用相关的类都放在system.threading命名空间中。

6、在thread类中包含以下几个重要的方法:

 start():启动线程;

sleep(int):静态方法,暂停当前线程指定的毫秒数;

abort():终止一个线程;

suspend():挂起线程,以后还可以恢复;

resume():恢复被挂起的线程;

 

二、简单线程的创建步骤

我们用一个简单的控制台应用程序来作为演示,代码如下图所示:

线程的入口是通过ThreadStart代理(delegate)来提供的,我们可以把ThreadStart理解为一个函数指针,指向线程所要执行的函数。当程序调用Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数。

三、线程的优先级

当不同线程之间争夺CPU资源时,CPU是按照线程的优先级来给予服务的。在c#应用程序中,用户可以为线程设定5个不同的优先级级别,由高到低分别为:Highest,AboveNormal,Normal,BelowNormal,Lowest 。

在创建线程时如果不指定优先级,那么体统默认为ThreadPriority.Normal。

给一个线程指定优先级,可以用如下代码:

newthreading.Priority=ThreadPriority.Lowest; 

四、带有参数的多线程

1、带有一个参数的情况

利用Thread(ParameterizedThreadStart)初始化Thread类的新实例,指定允许对象在线程启动时传递给线程的委托。

注意:ParameterizedThreadStart要求参数类型必须为object,所以在程序中所定义的方法的形参类型必须为object。

2、带多个参数的情况

由于Thread默认只提供了ThreadStart和ParameterizedThreadStart两种构造函数,所以如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类对象的时候实例化这个属性,然后进行操作。

在上述程序中为了简单我们只设置了一个属性text。在实际操作中,如果想传入多个参数,设置多个属性即可。

 

posted @ 2015-04-20 00:54  Darren_Liu  阅读(446)  评论(1编辑  收藏  举报