C# 多线程学习(二)线程操作
来源:互联网 发布:淘宝旺旺客服头像 编辑:程序博客网 时间:2024/05/29 16:24
在C#创建一个线程的时候,通常使用Thread类,然后提供一个线程入口,Thread thread =new Thread(functionName)
,线程的入口通过ThreadStart
代理(delegate)来提供,你可以把ThreadStart
当作一个函数指针,指向线程所要执行的函数(或者说 方法),当调用Thread.Start()
方法后,线程就开始执行ThreadStart
所代表或者说指向的函数。
然后我们开始编写一个简单的C#控制台应用程序来对一个创建的线程进行控制吧:
using System;using System.Threading;namespace ThreadControl{ class Program { public class test { public void testThread() { while (true) { Console.WriteLine("now ,it is in child thread"); } } } static void Main(string[] args) { test fun = new test(); //下面创建一个线程,让其做test.testThread()这个任务 Thread thread = new Thread(new ThreadStart(fun.testThread)); thread.Start();//开始线程 thread.Join();//让主线程等待子线程thread执行完毕 try { Console.WriteLine("Try to restart thread"); thread.Start(); } catch (ThreadStateException) { Console.WriteLine("ThreadStateException trying to restart Alpha.Beta.Error "); Console.ReadLine(); } Console.ReadLine(); } }}
主线程Main()函数
所有线程都是依附于Main()函数所在的线程的,Main()函数是C#程序的入口,起始线程可以称之为主线程。
如果所有的前台线程都停止了,那么主线程可以终止,而所有的后台线程都将无条件终止。
ThreadState 属性的取值如下:
- Aborted:线程已停止;
- AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止;
- Background:线程在后台执行,与属性Thread.IsBackground有关;
- StopRequested:线程正在被要求停止;
- Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行
- SuspendRequested:线程正在要求被挂起,但是未来得及响应;
- Unstarted:未调用Thread.Start()开始线程的运行;
线程的优先级
当线程之间争夺CPU时间时,CPU 是按照线程的优先级给予服务的。在C#应用程序中,用户可以设定5个不同的优先级,由高到低分别是
Highest
,AboveNormal
,Normal
,BelowNormal
,Lowest
,在创建线程时如果不指定优先级,那么系统默认为ThreadPriority.Normal。
给一个线程指定优先级,我们可以使用如下代码: //设定优先级为最低
myThread.Priority=ThreadPriority.Lowest;通过设定线程的优先级,我们可以安排一些相对重要的线程优先执行,例如对用户的响应等等。
阅读全文
0 0
- C# 多线程学习(二)线程操作
- C#多线程学习(二) 如何操纵一个线程(转载)
- C#多线程学习笔记(二)之线程同步
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- [C#] C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- C#多线程学习(二) 如何操纵一个线程
- 【转】JVM调优总结(十一)-反思
- 第十六周 动态规划
- Android动画初探
- 搭建百万级别邮件发送平台
- LINUX waitpid()函数的用法
- C# 多线程学习(二)线程操作
- GreenPlum无符号tinyint开发
- C/C++ Volatile关键词深度剖析
- MXNet的预训练:fine-tune.py源码详解
- linux下查看系统信息
- 约瑟夫环
- 网络编程 TCP 入门以及如何上传图片
- TotoiseSVN的基本使用方法
- 6.0权限回顾