C#多线程
2021-04-24 10:26
标签:storage star ora class 无法 OLE start stat 程序 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间的独立的,一个进程无法访问另一个进程的数据(当然不是一定的可以用分布式计算方式),一个进程运行失败也不会影响到其他进程的·运行,Windows系统就是利用进程把工作划分为多个独立的区域的。进程可以理解为一个程序的基本边界。应用程序的一个运行例程,是应用的一次动态执行过程。 线程(Thread)是进程中的基本执行单元,是操作系统分配CPU时间的基本单元,一个进程可以包括若干个线程,在进程入口执行的第一个线程被视为这个进程的主线程。在.Net应用程序中,都是以Main()方法做为入口,当调用此方法时系统就会自动创建一个主线程。线程主要就是由CPU寄存器、调用栈和线程本地存储器(Thread Local Storage,TLS)组成的。CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存放线程的状态信息。 想在深入了解的可以去https://www.cnblogs.com/w6w6/p/10648921.html这位大佬那里看看 C#多线程 标签:storage star ora class 无法 OLE start stat 程序 原文地址:https://www.cnblogs.com/mvpbest/p/13264305.htmlC#多线程
一、首先了解下基本概念
现在简单写多线程Thread的初步使用。
Console.WriteLine($"在调用 button1_Click Start {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("HH:mm:ss:fff")}");
{
{
ThreadStart threadStart = () =>
{
this.DoSomethingLong("button1_Click");
};
Thread thread = new Thread(threadStart);
thread.Start(); //开启一个新线程
}
{
ParameterizedThreadStart threadStart = ar =>
{
this.DoSomethingLong("button1_Click");
};
Thread thread = new Thread(threadStart);
thread.Start();
}
}
private void DoSomethingLong(string name)
{
Console.WriteLine($"在调用DoSomethingLong Start {name} {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("HH:mm:ss:fff")}");
long lResult = 0;
Thread.Sleep(2000);//线程等待
Console.WriteLine($"在等待线程后********DoSomethingLong End {name}" +
$"{Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("HH:mm:ss:fff")} {lResult}");
}
关于Thread还有
//thread.Abort);/终结线程其实是抛出一个异常都会有延时
//Thread.ResetAbortO;/是把终结的线程再次启用都会有延时
//thread.Priority=ThreadPriority.Highest:/是不是就可以保证是优先执行?设置高优先级,只是一个概率提升
//thread.IsBackground =true;//为后台线程进程结束,线程结束了
//thread.IsBackground=false;/前台线程进程结束后,任务执行完毕以后,线程才结束
//如果我们需要等待;
//1、等待
//while(thread.ThreadState!=ThreadState.Stopped)
//{
//Thread.Sleep(2000);
//}
//2、Join等待
//thread.Join();∥可以限时等待会阻塞,等待线程结束
//thread.Join(2000);∥可以限时等待,最多等待2000ms,超时以后就不等了