八线程学习笔记第1篇

  1. 多线程

伟光正又吩咐禁播《生活大爆炸》了。不知情如若谢耳朵知道了这件事会怎么吐槽。

  (1)
进程(Process):是WIndows系统中的叁个基本概念,它富含着二个周转程序所须求的财富,进程之间是对峙独立的,一个进度无法直接访问另一个经过的数据(除非动用分布式总结方法),1个进度运维的挫折也不会影响其它进度的运行,windows系统就是选拔进程把工作划分为多少个单身的区域,进度可以领略为二个程序的着力边界。

可是自身在此处先要吐槽一下谢耳朵的二个张冠李戴。在霍华德开心地让大家猜哪个人会被派去执行太空义务的时候,谢耳朵猜的是“MuhammadLi”。他觉得既然穆罕默德是社会风气上用得最多的名,而李是用得最多的姓,那么随机猜2个姓名的话,穆罕默德
李几率最大。

       1)要消除的标题:为了使程序可以产出执行(要出新处理就要隔离进度,使进度独立,即每一个进度有属于自个儿的数据段,程序段,进度控制块)

强烈那种说法不对。姓Li的多数是中国人,而叫Muhammad的大多数是穆斯林,那多个人群重叠不大。因而在内部贰个轩然大波(姓李)已经发出的前提下,发生另1个事件(名叫Muhammad)的原则几率相当的小,于是两事变的联合可能率(MuhammadLi的票房价值)也就没剩几个了。最有只怕的气象大概也等于有清真教名的炎黄普米族同胞吧。

       2)进度是割裂差距应用程序的一种财富

扯了那么多,其实小编的核心不是要商量可能率论,而是想说说取名字那件事。语文先生只要知道她当场的高足这么写小说一定会气疯的。

       3)进度德姆o,代码如下:

言归正传。

              static void Main(string[] args)

子曰:“名不正,则言不顺; 言不顺,则事不成。”

              {

又有俗语说:“遗子千金,不如教子一艺; 教子一艺,不如赐子佳名。”

                     //操作进度:GetCurrentProcess读取当前进度

依照本人的观看,身边80后的老人们给孩子取名首要分两大门派:一派是追随流行的文艺小清新派,一派是向民间古板致敬的五行风水派。可能可以不难地计算为流行派和复古派。除此以外还有热衷于生僻字的、喜欢谐音字的、喜欢四字名的等等,这里就不讨论了。

                     Console.WriteLine(Process.GetCurrentProcess());

先说流行派。这一派取的名字重名率卓殊高,因引也要命好辨认,最普遍的有“子”、“涵”、“轩”
、“浩”以及这个字的同音字。

                     //获取操作系统中的全部进度

事实上无论是是礼仪之邦依旧天堂,一定时代内特意流行某多少个名字都以很广泛的。比如听别人说这两年美利坚合众国最流行的女孩儿名是Sophia和艾玛,男孩名是Aiden
和Ethan。(出处于此)但外部看起来相似的景观,背后的缘由却不见得相同。

                     var process = Process.GetProcesses();

意大利人起名字重名率高是因为她们取名真的很随便。在U.S.A.多个班上二十来个学生里,有三多少个叫迈克尔的少数也不稀奇。乍一看,随便起个烂大街的名字就像是和西班牙人“追求天性”的形象很顶牛,其实不然。欧美姓多名少,同名的一大堆,但同姓的极少。U.S.又是个移民国家,各种姓氏私行都以一段家族史。性格都在姓氏中反映了,而名字只但是是让旁人叫的三个标记而已。于是随便在风靡的名字中挑3个也就行了。

                     foreach (var item in process)

神州的场所差异。80后的爹娘们多是独生子女。打小被人叫作“小公主”“小国王”。最近他俩友善生下了“小小公主”和“小小君主”,出于呈现性子的须要以及自古对姓名的保养,再增加中国姓少名多,父母们拾叁分器重名字的个性。因而,要说中国这几年那么多子女叫“子涵浩轩”也是因为老人太随便就荒唐了。恰恰相反,正是由于太不随便,太想取三个快心满志又大方的名字,可惜水平有限,知识储备不足,想象力也诚如,于是注意力就难免集中到个别多少个周丽娟味儿十足的字眼上来了。

                     {

第②大门派就是按五行八字取名的复“古”派了。在几十年的革命狂飙之后,古板文化又成了香饽饽。取名要看风水,“五行缺什么就在名字里补什么”的传道又流行起来。那种说法作者要么从周樟寿《故乡》里的不行闰土那里第三回听旁人讲的,没料想未来身边不少恋人还真是如此给小孩子取名的。

                            //输出全体操作系统的称呼

自个儿相信一人的名字和1个人的天命是有关系的。但原因不是何等阴阳数理,而是情绪暗示。名字的字形字义以及外人叫您名字时的听觉感受难免潜移默化地震慑着人的思想状态,进而影响人的一坐一起。因而我固然也同情要认真慎重地给娃儿起多个名字,但自个儿看不上用五行八字来命名那套理论,理由如下:

                            Console.WriteLine(item.ProcessName);

先是,理论本人靠不住脚。所谓的历史观姓名学其实是叁个大杂烩,各个理论五花八门,五行八字缺什么补什么只是内部一种而已。还有看名字笔划数的辩论呢(明显也很扯,是看简体字如故正体字?或者要看行书才最正宗吧?)。凭什么就相信这一套不信任另一套呢?

                     }

附带,说是复古,但古人未必是那般干的。本身才疏学浅,
如同没怎么听新闻说过北周长史也按五行八字取名的。假诺有个别话还请行家指教。唐宗宋祖五行都缺什么?青莲居士呢?辛幼安呢?按维基的说法:“南陈将来,姓名学和有关探究大概失传或刹车千年”(
普通话维基:姓名学
)。那那时期抚军以及近似一点的普通人家又是怎么取名的吗?据小编所知,中国三个很要紧的命名古板就是排字辈,双字名显然一个字,单字名分明一个偏旁。就算不可以排除1个字看字辈,多少个字看八字的图景,但拿小编家举例吧:作者的曾祖是“仁”字辈,祖父是“忠”字辈。再早的自家不明白了,听别人说老家还有族谱,但小编没见过。从自家二伯先导上边几辈依次是“正大光明远”。老人们只强调取名要按字辈,从没说过要看哪样八字,尽管是落地在唐宋的曾祖和出生在民国的曾外祖父的名字也不是按八字起的。作者的预计是各行各业八字取名法平昔不是法家文化的主流,推断在西魏也只是是一对底层的民间信仰而已。说要复古,你是喜欢复到墨家传统去,依旧喜欢复到民间信仰去?

                     //开启七个应用程序的进度

然则,作者确实不欣赏的倒也不是看八字命名那件事本身,这么取名顶多让自家觉得相比较土而已。说到底,身边的敌人用那种措施取名真正让自家倍感遗憾之处,其实是他俩好像尊重起名,但却把给子女取名那件主要的事务交给一个无关的别人去做,放任了送给本人的儿女生生中第1件珍视礼物的机遇。照自身看来,本人分明有这几个能力,却不愿投入时间精力,只晓得用花钱给取名公司大概六柱预测先生,其实真算不上“爱抚”。那跟口口声声说爱爱妻,但只晓得给太太花钱购物是1个天性的。照自个儿看,再Citroen化的名字,只倘若大人要好取的,也比花钱让外人取的名字更有意义。当然这些是观念难点,见仁见智吧。

                     Process.Start(“iexplore.exe”,
http://www.cnblogs.com/hanyinglong“);

说完价值观,再说方法论。走群众路线的,除了高尚范儿,其实若是把范围稍微扩张一点点,比如再来点Louis Cha范儿,参考一下“清扬”、“语嫣”等等(金庸(Louis-Cha)英雄那一个名字也都不是瞎起的啊),选取就会多居多。走复古路线的,假如真喜欢古板文化,首先,与其去找看相先生,何不讨论研商家谱,续上你家的字辈?哪怕字辈已经失传,从本人这一辈重新立起来也得以嘛。其它,传统文化接踵而至 蜂拥而至,比五行八字更文明、操作起来也并不困难的其他选项也多得很。比如有一种说法是“女诗经,男九歌,文论语,西夏易”。其实只要有高中文化程度,肯花点时间和生机,把这几部经典找来,根据注释,找一些意义美好又流畅的好名字其实真正不难。像江西大家齐邦媛的名字就出自《诗经》,作家戴朝安的名字则取自《九章》。

                     var p = Process.Start(“notepad.exe”);

爱护于互相攀比的老人们,如果外人家的子女是找看相先生批八字起的,而你家孩子的名字是你协调从六柱预测先生的祖师爷写的《周易》里取的,难道不是仓卒之际就了不起上了么?

                    //杀掉四个线程

                     Thread.Sleep(3000);

                     p.Kill();

             }

  (2) 线程:线程就是八个代码段的执行流

      
1)是Windows职务调度的细单反相机位,线程是先后中的1个执行流,每一种线程都有温馨的专有寄存器(栈指针,程序计数器等),但代码区是共享的,即不相同的线程可以执行同样的函数。

      
2)消除难题:进度是一个能源的拥有者,因为在进度的创建,废除和切换的历程中,系统必须为自交付比较大的付出,限制了并发程序的进一步进步

       3)叁个经过可以有四个线程

       4)CPU的为主切换的是线程

       5)操作系统:三个CPU同一时半刻间只好执行贰个线程,多核,

      6)操作系统切换线程的时候需求将线程的财富,状态都要保存起来。

       7)线程成立的时候要求线程的决定块(1M),线程栈,线程寄存器。

 (3) 托管代码和非托管代码的分别

    起名 1

  (4) 线程德姆o,创制多个控制台应用程序,代码如下:

namespace ThreadDemo

{

      //当前这个程序的代码是执行在主线程上面的

      class Program

      {

            static void Main(string[] args)

             {

                      //打印出当前主线程的信息

                      Thread currentThread= Thread.CurrentThread;

                      //打印出主线程的ID,ManagedThreadId是托管线程的一个唯一编号

                      Console.WriteLine("当前默认的主线程的ID是" + currentThread.ManagedThreadId);

                      //创建一个线程,传递一个ThreadStart参数,这个参数转到定义可以看到是一个委托

                       //创建一个线程对象,并没有真正的分配线程

                       Thread threadDemo = new Thread(ThreadDemoMethod);

                       //只有调用此方法的时候,才是真正的告诉操作系统线程准备好,请操作系统分配线程并且执行

                       threadDemo.Start();  //启动线程来执行

                       Console.WriteLine("主线程执行结束");

                       Console.ReadKey();

              }

                static void ThreadDemoMethod()

                {

                       Console.WriteLine("另一个线程正在执行,线程的ID是{0}", Thread.CurrentThread.ManagedThreadId);

                }

          }

  }

       那段代码的实践结果是:

              当前暗许的主线程的ID是1

              主线程执行达成

             另3个线程正在进行,线程的ID是3

  (5) 应用程序域

    1)它提供安全而通用的处理单元,公共语言运转库(CL奥德赛)可以行使它来提供应用程序之间的隔断。您可以在全部同样隔离级别(存在于独立的长河中)的单个进度中运维多少个使用程序域,而不会招致进度间调用大概经过间切换等方面的额外成本,在三个历程内运转七个应用程序的能力显著增强了服务器的可伸缩性

      
2)应用程序域里面有内存分配的堆,也提供了一种代码安全的界限(七个利用程序域之间的代码是相互隔离的),提供了老大的处理

       3)二个应用程序域可以跑四个线程

      
4)三个线程同目前间只好运营在二个运用程序域中,不过多个行使程序域可以同时持有八个线程

       5)应用程序域德姆o

              static void Main(string[] args)

              {

                     //打印当前利用程序域

                    
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);

                     //成立应用程序域

                     AppDomain domainDemo =
AppDomain.CreateDomain(“韩迎龙”);

                    
//让当前利用程序域运行实施1个exe程序(可以分包执行1个exe,不过可以有八个程序集dll)

                    
//第3步:将其它品类中的exe文件和pdf文件拷贝一份放到我们那几个项目下边

                    
//第三步:将方面拷贝进来的exe文件右键属性,修改复制到输出目录为始终复制

                    domainDemo.ExecuteAssembly(“摇奖机.exe”);

             }

      6)执行结果,如图所示:

      起名 2

  (6) 不难线程详细表明

    1)线程的调度是由操作系统来操作的,大家的操作只是提出

       2)threadDemo.IsBackground = true;

             -> 设置当前线程的1个序列,暗中认同是前台线程

         ->
true代表设置3个后台线程,当前台线程都关闭之后,当前经过就直接关门了

         -> false代表设置3个前台线程,

       3)线程设置德姆o

            class Program

            {

                   static void Main(string[] args)

                   {

                          Thread threadDemo = new Thread(DemoThreadMethod);

                          //设置当前线程的优先级,只是建议操作系统,给我当前的这个线程,优先级高点

                          threadDemo.Priority = ThreadPriority.Highest;

                          //如果设置成前台线程,那么就必须当前线程执行完毕之后,整个进程才会推出

                          threadDemo.IsBackground = true;

                          threadDemo.Start();

                          Thread.Sleep(3000);

                          //关闭线程

                          //threadDemo.Abort();

                          //将当前执行此代码的线程阻塞,等待线程执行完毕

                          threadDemo.Join(1000);

                          //给线程起一个名字

                          threadDemo.Name = "线程";

                          Console.WriteLine("主线程执行完毕");

                   }

                   static void DemoThreadMethod()

                   {

                          while (true)

                          {

                                 Console.WriteLine(DateTime.Now.ToString());

                          }

                   }

            }

  (7) 带参数的线程表达

    1)ParameterizedThreadStart执行办法

              ->查看Reflect: public delegate void
ParameterizedThreadStart(object obj);

       2)线程的信托都以从未再次来到值的,因为我们不知情线程何时甘休

       3)带参数的线程德姆o

            class Program

            {

                   static void Main(string[] args)

                   {

                          //运转1个带参数的线程

                          Thread threadDemo = new Thread(DemoParamets);

                          //给线程钦赐的形式传递参数

                          //可以传递数组

                          threadDemo.Start(“韩迎龙”);

                          Thread.Sleep(2000);

                          Console.ReadKey();

                   }

                     static void DemoParamets(object data)

                   {

                          Console.WriteLine(data.ToString());

                   }

            }

     4)将方面那段代码在Reflect中查看代码:如图所示:

    起名 3

  1. 线程中如何访问控件

  (1)
新建一个Winform应用程序,起名为:MultiThread,给这么些新建的WinForm窗体添加三个文本框控件和一个Button按钮

  (2)Demo代码

     public partial class Form1 : Form

     {

            public Form1()

            {

                   InitializeComponent();

                   //如果不写的话会报这个错误:线程间操作无效: 从不是创建控件“txtMSg”的线程访问它。

                   //还有一种方式解决将在下面说到

                   Control.CheckForIllegalCrossThreadCalls = false; 

            }

            private void btnThread_Click(object sender, EventArgs e)

            {

                   //这是一种写法

                   //new Thread(() =>

                   //{

                   //    txtMSg.Text = DateTime.Now.ToString();

                   //}).Start();

                   //第二种说法

                   Thread thread = new Thread(ChangeTxt);

                   thread.Start();

            }

            public void ChangeTxt()

            {

                   txtMSg.Text = DateTime.Now.ToString();

            }

     }
  1. 运用委托完结五个界面之间数据的相互案例

  (1)
新建多少个Winform程序,将Form1窗体作为主窗体,在新建三个窗体作为子窗体,给父窗体添加二个Button和3个TextBox控件。给子窗体中添加八个Button控件和一个TextBox控件,项目样式在末端有截图:

 (2)主窗体中的代码如下:

     public partial class Form1 : Form

     {

            public Form1()

            {

                   InitializeComponent();

                   //如果不写的话会报这个错误:线程间操作无效: 从不是创建控件“txtMSg”的线程访问它。

                   //还有一种方式解决将在下面说到

                   Control.CheckForIllegalCrossThreadCalls = false; 

              }

            private void btnThread_Click(object sender, EventArgs e)

            {

                     while (true)

                   {

                          Thread thread = new Thread(ChangeTxt);

                          thread.Start();

                   }

            }

            public void ChangeTxt()

            {

                   txtMSg.Text = DateTime.Now.ToString();

            }

            private void btnStart_Click(object sender, EventArgs e)

            {

                   //使用委托实现

                   FrmChild frm = new FrmChild();

                   //把当前主窗体的应用添加到this中

                   frm.ParentFrm = this;

                   frm.AfterTxtChange = new SetTextDel(SetText);

                   frm.Show();

            }

            //添加一个方法给主窗体的控件赋值

            public void SetText(string str)

            {

                   txtMSg.Text = str;

            }

     }

(3)子窗体中的代码如下:

     //使用委托实现这个功能

     public delegate void SetTextDel(string str);

     public partial class FrmChild : Form

     {

            //定义了一个父窗体的变量

            public Form1 ParentFrm;

            //定义一个委托类的实例

            public SetTextDel AfterTxtChange;

            public FrmChild()

            {

                   InitializeComponent();

            }

            private void btnParent_Click(object sender, EventArgs e)

            {

                   string childtxt = txtChildMsg.Text;

                   //第一种方法

                   ////将值同步到主窗体上面

                   //this.ParentFrm.SetText(childtxt);

                   //第二种方法

                   AfterTxtChange(childtxt);

            }

     }

     (4)完毕结果如图所示:

    起名 4

  1. 总结

  (1) 为什么要用二十四线程

       1)让电脑”同时”做多件业务,节约财富。

       2)四线程可以让3个顺序”同时”处理八个业务。

    
  3)后台运维程序,升高程序的运维成效,也不会是主界面出现无响应的图景

  (2)暴发叁个线程的多少个步骤

       1)编写发生线程所要执行的办法。

       2)引入System.Threading命名空间。

      
3)实例化Thread类,并传播2个针对线程所要运维格局的寄托(那时候线程已经暴发,可是还尚未运转)。

      
4)调用Thread实例的Start方法,标记该线程可以被CPU执行了,不过实际的执行时间由CPU决定。

  (3)注意”方法重入”的标题

      
1)所谓的方法重入,是一个有关三十二线程编程的定义,程序中多少个线程同时运行时,就恐怕发生同3个方法被多少个线程同时调用的景况,当以此措施中留存有的非线程安全的代码,方法重入就会促成数据不均等的情事,那是2个严重的Bug。

  (4)进程和线程

       1)一个进程至少有三个线程

       2)同三个进度中的三个线程之间可以”并发”执行。

      
3)线程是先后中的三个执行流,逐个线程都有温馨的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不一样的线程可以执行同样的函数。二十四线程是指程序中蕴藏多少个执行流,即在一个程序中可以而且运行五个不等的线程来推行不一的天职(代码),也等于说允许单个程序成立几个并行执行的线程来已毕各自的职分。

  (5)前台线程和后台线程

       1)前台线程:只有具有的前台线程都关门才能形成程序关闭。

       2)后台线程:唯有具有的前台线程停止,后台线程自动终止。

  (6).NET中什么落到实处二十四线程?

      
1)线程肯定也是要实施一段代码的。所以要发出3个线程,必须先为该线程写叁个方法,这些主意中的代码就是该线程运维所要执行的代码(找一位来做那件事情)

      
2)线程启动时,通过信托调用该方法.(线程运维时,调用传过来的委托,委托就会实行相应的代码,完成线程执行的措施)。

  (7)Thread类的有些分子

       1)Start()运营线程

       2)Abort()终止线程

起名,       3)Thread.Sleep(100)静态方法,可以使近期线程停止一段时间在运作

       4)Name线程名称

       5)Thread.CurrentThread得到当前的线程引用

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图