0
点赞
收藏
分享

微信扫一扫

理解进程与线程


  • 进程
  1. 程序是一段可执行的代码
  2. 进程可以为程序执行的执行实例。程序执行一次,产生一个进程;程序执行结束等价于进程结束并销毁
  3. 进程间不能共享其他进程的资源
  • 线程
  1. 一个线程是一个CPU可执行的通道(多核多线程CPU)
  2. 一个进程包含一个主线程,并创建多个线程。
  3. 所有线程共享进程资源

不带参数线程
using System.Threading;
void Test() {
Thread t = new Thread (Thread_Proc);
t.Start();
}
void Thread_Proc () {
Console.Write ("Hello Thread!");
}

带参数线程
void Test() {
Thread t = new Thread (Thread_Proc);
t.Start("Hello Thread!");
}
void Thread_Proc (object obj) {
Console.Write (obj);
}

匿名函数线程
void Test() {
Thread t = new Thread (
delegate() { Console.Write ("Hello Thread!"); } );
t.Start();
}
使用lambda表达式
void Test() {
Thread t = new Thread (
() => Console.Write ("Hello Thread!"));
t.Start();
}

匿名函数线程调用普通函数
void Test() {
Thread t = new Thread (
delegate() { Thread_Proc ("Hello Thread!"); } );
t.Start();
}
void Thread_Proc (string text) {
Console.Write (text);
}

创建后台进程

前台进程全部结束后,程序结束,后台线程强行终止。
默认创建的是前台进程

后台线程种植将避开finally或using中的清理工作,需小心处理

void Test() {
Thread t = new Thread (
delegate() { Console.Write ("Hello Thread!"); } );
t.IsBackgroud = true;
t.Start();
}

线程池

线程池通过共享线程资源并自动回收,达到优化线程开销
的目的
◼ 线程池中的线程都是后台线程
◼ 通过ThreadPool.QueueUserWorkItem使用线程池

void Test() {
ThreadPool.QueueUserWorkItem (Thread_Proc, "Hello");
}
void Thread_Proc (object obj) {
Console.Write (obj);
}

线程与进程优先级

线程优先级
 t.Priority = ThreadPriority.AboveNormal;
 Lowest/BelowNormal/Normal/AboveNormal/Highest
◼ 进程优先级
using System.Diagnostics;
Process.GetCurrentProcess ().PriorityClass =
ProcessPriorityClass.AboveNormal;
Idle/BelowNormal/Normal/AboveNormal/High/RealTime

线程中程修改界面控件

易懂的写法

delegate void DelSetText (string text);
void SetText (string text)
{
if (textBox.InvokeRequired)
textBox.Invoke (new DelSetText (SetText), text);
else
textBox.Text = text;
}

◼ 简洁的写法

delegate void DelSetText (string text);
void SetText (string text)
{
Invoke (new DelSetText ((text_d) => { textBox.Text = text_d; }),text);
}


举报

相关推荐

0 条评论