最近做一个项目的时候,由于在打开主界面的时候,要检查与硬件的链接的情况,然后还要向硬件发送发送命令,但是这些检测所花费的时间是很长的,大约要等十几秒到几十秒,二在等待的过程当中,系统是不能进行其他工作的。这样就有了一个需求,如何让该系统能够正常的进行其他工作,而他还能进行检测硬件呢?
经过百度,查资料,发现线程可以很好的解决这个问题。下面我就为大家一一讲解关于线程的一些问题。
在介绍线程之前,先来了解一下什么叫做进程, 进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。就是任何一个完成性的事情都可以称之为一个进程。
那么什么是线程呢?线程是指程序的一个指令执行序列,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();
}
这样你的程序就肯定能够正常运行了。 线程的应用的博大精深,在以后的学习当中,可能还会研究到,如果有兴趣学习您继续关注。
下边给大家推荐一个博客,这个博客当中,详细的解释了,什么是线程,怎么应用。有兴趣的博友可以去看一下,一定会受益匪浅。