C#学习笔记-线程
2016-04-11 14:07
645 查看
关键点
1,Thread,ThreadPool,BackgroundWorker,task,Timer
2,AutoResetEvent 线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号。如果 AutoResetEvent 处于非终止状态,则该线程阻塞,并等待当前控制资源的线程
通过调用 Set 发出资源可用的信号。
3,Mutex,Semaphore,Lock,Monitor
详解
1,进程(Process):进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。
进程启动
运行进程的查看
进程的关闭
2,线程(Thread):进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源
线程的创建,开启:
线程的挂起:
线程的停止
3,线程池(ThreadPool)
线程的添加
4,Task
Task的开启:
5,BackgroundWorker
BackgroundWorker的创建和开启(另外可通过vs工具箱进行添加)
6,Timer定时器
this.timer1.Interval=100;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
this.timer1.Start();
7,Mutex互斥锁,同步时可使用
8,Lock,线程同步时可使用
9,Monitor
Monitor.Enter(object)方法是获取锁
Monitor.Exit(object)方法是获取锁
注:Monitor为一个静态类,使用时,类似Mutex,不退出,该线程一直占有
10,ManualResetEvent,对一个或者多线程的同时的控制
ManualResetEvent manualEvent=new ManualResetEvent (false)
manualEvent.Reset(); //将事件状态设置为非终止状态,导致线程阻止。
manualEvent.Set(); //将事件状态设置为终止状态,允许一个或多个等待线程继续。
11,Semaphore
Semaphore semaphoreTest = new Semaphore(1, 3);//初始允许请求数为1,最大允许请求数为3
是操作系统维持的一个允许请求数。当允许请求数=0时,其他线程无法进入。当允许请求数>0时,线程可以进入。每当一个线程进入(semaphoreTest .waitOne()),允许请求数-1,线程退出后(semaphoreTest .Release())允许请求数+1。不能大于最大的允许请求数
1,Thread,ThreadPool,BackgroundWorker,task,Timer
2,AutoResetEvent 线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号。如果 AutoResetEvent 处于非终止状态,则该线程阻塞,并等待当前控制资源的线程
通过调用 Set 发出资源可用的信号。
3,Mutex,Semaphore,Lock,Monitor
详解
1,进程(Process):进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。
进程启动
Process pro = Process.Start(@"C:\1.exe");
运行进程的查看
foreach (Process proi in Process.GetProcesses()) { this.listView1.Items.Add(new ListViewItem(new string[]{proi.ProcessName,proi.Id.ToString(),proi.Threads.Count.ToString()})); }
进程的关闭
Process pro = Process.Start(@"C:\1.exe"); ........................... pro.Kill();
2,线程(Thread):进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源
线程的创建,开启:
Thread th = new Thread(new ParameterizedThreadStart(Th)); th.Start(); ........ public void Th(object sender) { while(true) { .............. } }
线程的挂起:
th.Suspend();
线程的停止
th.Abort();
3,线程池(ThreadPool)
线程的添加
ThreadPool.QueueUserWorkItem(WaitBackF); ...................... public void WaitBackF(object sender) { while(true) { .................. } }
4,Task
Task的开启:
//Task task1 = new Task(TaskF); //task1.Start(); Task task1 = Task.Factory.StartNew(TaskF); .................... public void TaskF() { while (true) { ............................ } }
5,BackgroundWorker
BackgroundWorker的创建和开启(另外可通过vs工具箱进行添加)
BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += new DoWorkEventHandler(BWF); bw.RunWorkerAsync(); ........................ public void BWF(object sender, DoWorkEventArgs e) { while (true) { ......................... } }
6,Timer定时器
this.timer1.Interval=100;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
this.timer1.Start();
7,Mutex互斥锁,同步时可使用
Thread threadTest0; Thread threadTest1; Mutex mutexTest0 = new Mutex(true,"MutexTest0"); //互斥锁的初始状态就是被主线程所占有 ..... //线程开启之前,需要释放Mutex,否则一直被主线程占有,其他线程无法获取状态 mutexTest0.ReleaseMutex(); //另外一种方法,Mutex mutexTest0 = new Mutex(false,"MutexTest0");//设置为false,互斥锁的初始状态就是自由 ..... private void ThreadFun0() { while (true) { Thread.Sleep(800); mutexTest0.WaitOne(); MessageBox.Show("ThreadFun0"); mutexTest0.ReleaseMutex(); //break; } } private void ThreadFun1() { while (true) { Thread.Sleep(800); mutexTest0.WaitOne(); MessageBox.Show("ThreadFun1"); mutexTest0.ReleaseMutex(); //break; } }
8,Lock,线程同步时可使用
object obj=new object(); ..... Fun() { Lock(obj) { ................ } }
9,Monitor
Monitor.Enter(object)方法是获取锁
Monitor.Exit(object)方法是获取锁
注:Monitor为一个静态类,使用时,类似Mutex,不退出,该线程一直占有
Thread threadTest0; Thread threadTest1; object obj = new object(); private void ThreadFun0() { while (true) { Thread.Sleep(800); Monitor.Enter(obj); MessageBox.Show("ThreadFun0"); Monitor.Exit(obj); } } private void ThreadFun1() { while (true) { Thread.Sleep(800); Monitor.Enter(obj); MessageBox.Show("ThreadFun1"); Monitor.Exit(obj); } }
10,ManualResetEvent,对一个或者多线程的同时的控制
ManualResetEvent manualEvent=new ManualResetEvent (false)
manualEvent.Reset(); //将事件状态设置为非终止状态,导致线程阻止。
manualEvent.Set(); //将事件状态设置为终止状态,允许一个或多个等待线程继续。
11,Semaphore
Semaphore semaphoreTest = new Semaphore(1, 3);//初始允许请求数为1,最大允许请求数为3
是操作系统维持的一个允许请求数。当允许请求数=0时,其他线程无法进入。当允许请求数>0时,线程可以进入。每当一个线程进入(semaphoreTest .waitOne()),允许请求数-1,线程退出后(semaphoreTest .Release())允许请求数+1。不能大于最大的允许请求数
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法