一点关于线程和摇奖机
一点关于线程和摇奖机
怎么说呢。第一呢。还是说一下什么是进程吧。进程呢就是一个正在执行的实例。它包含着一个运行程序需要的所有资源,进程之间是相互独立的,一个进程是没办法直接访问另外一个进程的数据的。然后每个进程中都至少有一个线程。线程就是cpu调用的最小单位。他们之间是互相隔离,互不影响的。创建一个一个线程比创建一个进程快得多。其间的切换亦是如此 。另外呢,线程之间是平等的。没有父子关系的。每个线程都有自己的唯一编号。
那么现在有一个需要,就是写一个摇奖机的小程序。要求界面上有两个按钮,一个是开始按钮,一个是停止按钮。一点开始按钮,界面上显示随机的五位数且数字快速的滚动。一点停止按钮数字就停止滚动。如果只是简单的说得到一个五位数的随机数来看是否中奖什么的话那么就完全用不着线程了。写个随机数也就完全搞定。只是这里要求有五个数字。不停的滚动。他们是彼此不影响的。那么这个就得用到线程了。
如下图。那么就先声明一个Label的集合和一个Thread的集合。括号。这两个集合写在了第二个图片上。并且初始化一下Label一下。将其加入到控件集合和声明的Label的集合中。
然后。括号。那两个集合的代码在下面这幅图里。接着就是点击开始按钮的时候,我们根据Label的数量创建线程。有几个Labe就创建几个线程。注意一下,启动执行一个带参数的方法,使用new ParameterizedThreadStart()。思路就是产生五个0到9之间的随机数,将其赋值给Label的内容。需要注意的是随机数是声明的for循环外面。因为一个种子的问题。具体为神马,小杜同学也是不太清楚的,大概就是Random后面括号里是有一个种子的,写在for循环里面的话,种子的相同的概率会很大。或者是写在for循环里面但是,在Random后将i写到括号里,每次传进来的i每次总是不同的,种子也就不同了。如果有哪位大神能解释一下,表示各种欢迎以及感谢。还有每次都要让线程休息一小会。让他自己有时间做点别的事情。
下面的就是当点击停止按钮时,让线程终止。
那么这个小程序就算是成功了。点开始时他会一直滚动。停止时便会停止下来。