线程

    最近做一个项目的时候,由于在打开主界面的时候,要检查与硬件的链接的情况,然后还要向硬件发送发送命令,但是这些检测所花费的时间是很长的,大约要等十几秒到几十秒,二在等待的过程当中,系统是不能进行其他工作的。这样就有了一个需求,如何让该系统能够正常的进行其他工作,而他还能进行检测硬件呢? 

    经过百度,查资料,发现线程可以很好的解决这个问题。下面我就为大家一一讲解关于线程的一些问题。 

    在介绍线程之前,先来了解一下什么叫做进程, 进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。就是任何一个完成性的事情都可以称之为一个进程。

    那么什么是线程呢?线程是指程序的一个指令执行序列,WIN32 平台支持多线程程序,允许程序中存在多个线程。 在单CPU 系统中,系统把 CPU 的时间片按照调度算法分配给各个线程,因此各线程实际上是分时执行的,在多CPU 的 Windows NT 系统中, 同一个程序的不同线程可以被分配到不同的CPU 上去执行。

    他们有什么关系呢?   

   (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。

   (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。

   (3)处理机分给线程,即真正在处理机上运行的是线程。

   (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

相信通过这些简单的介绍之后,大家对线程有了一个初步的认识,那么线程如何跟自己做的程序联系起来呢?

看下边一个简单的例子? 不用讲解,就是但是按钮后,让他循环9999999*9999999次, 然后label1显示完成了。

private void test()
{
     int i=0;
     int j=0;
     for (i = 0; i < 9999999; i++)
     {
          for  (j = 0; j < 9999999; j++)
          {
                j++;
          }
          i++;
      }
      label1 . Text = Convert.ToString (i);
}

private void button1_Click_1(object sender, EventArgs e)
{
     test();
}

      

    这样在你运行你的程序后,点击按钮,你的程序不用说,肯定会死在那里。但是用下我们上边说的那样,新开一个线程,然后在空余的时间的再去执行,

看代码:

  

private void test()
{
     int i=0;
     int j=0;
     for (i = 0; i < 9999999; i++)
     {
         for  (j = 0; j < 9999999; j++)
         {
              j++;
         }
         i++;
      }
      label1 . Text = Convert.ToString (i);
}

private void button1_Click_1(object sender, EventArgs e)
{
     Thread thread = new Thread(test);
     thread.Start();
}

    这样你的程序就肯定能够正常运行了。  线程的应用的博大精深,在以后的学习当中,可能还会研究到,如果有兴趣学习您继续关注。

    下边给大家推荐一个博客,这个博客当中,详细的解释了,什么是线程,怎么应用。有兴趣的博友可以去看一下,一定会受益匪浅。

线程,布布扣,bubuko.com

线程

上一篇:java笔记之final和static关键字


下一篇:欢迎访问我的独立博客 tracefact.net