C起名#二10拾2线程学习

转自:http://www.cnblogs.com/xugang/archive/2008/04/06/1138856.html

用子类化解区别的设施

因为要决断我们的次序正运转在哪个设备上,所以,我们的代码某些零乱了,IF来ELSE去的,记住,未来你花在保险代码上的年月要比花在写代码上的岁月多,假使您的门类一点都十分大,且IF语句布满获得处都是,那么能够悲催地报告您,你将要追踪华为平板或HUAWEI的功效方木槿越来越多的时日,越来越大的活力。

    在底下的建议中,大家不是指向平板电脑,而是要建立一种用古板的卷入才能来提取类、封装方法的思路和习贯,那样不仅会削减那么些个啰哩啰嗦的准绳推断,还是可以够使代码结构尤其显明。

    比方,三个越来越精明的艺术正是把你的类分成多少个不等的花色,把那么些多少个道具共用的代码放在共享种类中,把金立相关的代码放在一加体系中,把surface相关的代码放在平板电脑种类中,在本节甘休的时候,我们的源代码结构将改为下图那样:
起名 1

    首先考虑RootViewController,这一个中,大家只修改了表视图代理的tableView:didSelectRowAtIndexPath:方法的得以落成,以让它是适应于不一样的配备,以后,我们就从RootViewController类中干掉它,然后创立四个子类达成它。

    成立2个RootViewController的子类,起名字为RootViewController_Pad,头文件之中几乎没啥东西:
起名 2

    实现起来也一点也不细略,在那在那之中大家将针对平板电脑落成代理方法,假诺喜欢偷懒,就从RootViewController.m中把GALAXY Tab对应的代码复制、粘贴过来:
起名 3

    接着,大家用类似的法门针对魅族成立RootViewController_Phone子类,不用说,该子类的老爸也是RootViewController类。
起名 4

    自然,在这之中代理方法落成的是HTC功效,大家继续发扬复制、粘贴的旺盛,从RootViewContoller.m的tableView:didSelectRowAtIndexPath:方法中摘出摩托罗拉对应的代码:
起名 5

    通过子类化RootViewController,大家没费多大劲就把surface、诺基亚的服从分别开来,从RootViewController.m中删除tableView:didSelectRowAtIndexPath:方法。如此,超类中含有了装有表视图的数据源方法,而针对性具体设备的效应方法,都被放在了子类中,从而完结了多少与效果的分别。

    可是,事儿还不曾干完,程序还不驾驭这个子类的留存,大家还要把施用代理切成三星平板份和一加份,并让他俩分别调用相应的子类。

哪些是进度?
当四个顺序初步运营时,它便是1个经过,进度包蕴运营中的程序和顺序所运用到的内部存款和储蓄器和系统能源。
而1个经过又是由八个线程所结合的。

2.5     把利用代理分开

     为了调用上边包车型地铁子类,咱们还要做一些更换,那便是针对性不一样的阳台成立分歧的行使代理,在超类DailyShootAppDegelate中保留这个设备共用的代码,其头文件如下:
起名 6

    在促成公文中,干掉那么些判别目标设备的代码,稍后,大家将增多子类的早先视图,DailyShootAppDegelate.m的剧情如下:
起名 7

    创设三个DailyShootDegelate_Phone类,其头文件内容如下:
起名 8

    对于红米,大家要拉长导航调整器的视图,一增添进去它就会在最上面呈现,然后,还要调用超类的application:didFinishLaunchingWithOptions方法:
起名 9

    类似的,再创建DailyShootAppDegelate_Pad类,其头文件内容如下:
起名 10

    在这些子类中,要求丰盛二个区划视图调整器(UISplitViewController)属性,在落成中,大家将把分割视图调整器的视图作为顶部视图增加进去,并在dealloc方法中释放财富:
起名 11

    到今日,职业为主做到,不过先别着急,我们还要求对nib文件做轻巧修改。在IB中开辟MainWindow.nib,用实体查看器把DailyShootAppDegelate对象的花色改为DailyShootAppDegelate_Phone,把RootViewController对象的品类改为RootViewController_Phone。
起名 12

    类似的,在IB中打开MainWindow_三星GALAXY Tab.nib,用实体查看器把DailyShootAppDegelate对象的项目改为DailyShootAppDegelage_Pad,把RootViewController对象的花色改为RootViewController_Pad。
起名 13

    保存全部成果,生成并运行,全体的事物将如此前这样运营。

    为了替换五个大约的if语句大家就做了那样多工作,是还是不是认为很磨叽?不过,凡事要朝好的主旋律想,你的代码是或不是变得明明白白灵活了?其实,你大概感到做这一个修改也绝非费多少时间,然则,这么做确实很入眼。

怎样是线程?
线程是先后中的三个施行流,各种线程都有和好的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即区别的线程能够试行一样的函数。

二.六     在事无巨细视图中加多多个工具条

下一步,让大家在华为平板中被AssignmentViewController管理的事无巨细视图的顶部增添3个工具条,竖着使用华为平板时,为了隐藏和出示导航视图,大家真正须求贰个工具栏放置“导航”按钮;即便在横屏下,留着它也挺好,因为,有时候隐藏掉导航视图会使分界面更清晰。Samsung版本的分界面已经有个导航条,所以并非理会它。

大家要开创三个华为平板版的AssignmentViewController,选择“平板电脑组”,创设新文件,该公文是UIViewController的子类,记着选中“针对平板电脑”、“成立XIB”多少个复选框,且将新类命名称叫AssignmentViewController_Pad。

    给AssignmentViewController_Pad类增多名字为toolbar的公共性质,其类别为UIToolbar,把超类从通用的UIViewController改为AssignmentViewController。
起名 14

    打开AssignmentViewController_Pad nib,在视图的顶部放一个UIToolbar,剩下的局地用UIWebView填充,把工具条上的默许开关干掉,待会我们成立和睦的按键。在UIWebView对象的习性查看器中,把“Scales Pages”的值设置为“Fit”,从“Files’Owner”中把四个外表接口与那几个成分相连,保存。

    现在,在AssignmentViewController_Pad类的贯彻公文中就从未多少事情要做了:
起名 15

    上面,大家要对MainWindow_苹果平板.nib做一些调动,用实体查看器把AssignmentViewController对象的品种改为AssignmentViewController_Pad,接着,还要用属性查看器把NIB名称改为AssignmentViewController_Pad,别忘了保存。

    好了,运行运营,看看工具条是或不是出去了,下边我们就要划分视图(横屏)和浮泛窗体(竖屏)中选拔工具条。

何以是四线程?
二十多线程是指程序中带有八个实行流,即在八个先后中能够而且运行七个例外的线程来推行不壹的职务,也正是说允许单个程序成立三个并行推行的线程来成功各自的职分。

多线程的功利:
能够巩固CPU的利用率。在二十四线程程序中,3个线程必须等待的时候,CPU能够运转其它的线程而不是等待,那样就大大升高了先后的频率。 

二十四线程的不利方面:
线程也是先后,所以线程必要占用内存,线程越来越多占用内部存款和储蓄器也愈多; 
10二线程必要和煦护医疗治本,所以须求CPU时间追踪线程; 
线程之间对共享财富的访问会相互影响,必须消除竞用共享能源的主题材料;
线程太多会促成调控太复杂,最后恐怕导致广大Bug;

接下去将对C#编制程序中的多线程机制举行研讨。为了节约创设GUI那个繁琐的步子,更分明地逼近线程的本色,接下去的具有程序都以调整台程序,程序最终的Console.ReadLine()是为着使程序中途停下来,以便看理解实行进程中的输出。 

任何程序在实施时,至少有1个主线程。

多个直观影象的线程示例:

//SystemThread.cs
using System;
using System.Threading; 

namespace ThreadTest
{
  class RunIt
  {
    [STAThread]
    static void Main(string[] args)
    {
      Thread.CurrentThread.Name=”System Thread”;//给当下线程起名字为”System Thread”
            Console.WriteLine(Thread.CurrentThread.Name+”‘Status:”+Thread.CurrentThread.ThreadState);
      Console.ReadLine();
    }
  }
}

出口如下: 
System Thread’s Status:Running 

在那里,大家通过Thread类的静态属性CurrentThread获取了当下实行的线程,对其Name属性赋值“System
Thread”,最后还输出了它的脚下气象(ThreadState)。

所谓静态属性,正是其1类具有目的所国有的品质,不管您创建了不怎么个那个类的实例,但是类的静态属性在内部存款和储蓄器中唯有3个。很轻易领悟CurrentThread为何是静态的——固然有八个线程同时存在,可是在某3个每一天,CPU只可以实行当中3个。 

在先后的尾部,大家应用了之类命名空间:
     using System;
     using System.Threading; 
 
在.net framework class
library中,全部与10贰线程机制应用相关的类都以投身System.Threading命名空间中的。假设你想在您的应用程序中选拔拾2线程,就不可能不带有这一个类。

咱俩由此内部提供的Thread类来成立和垄断(monopoly)线程,ThreadPool类用于管理线程池等。
(其它还提供解决了线程实行安顿,死锁,线程间通信等其实难题的体制。)

Thread类有几个根本的章程,描述如下:
Start():运行线程;
Sleep(int):静态方法,暂停当前线程钦赐的阿秒数; 
Abort():平日选择该格局来终止八个线程;
Suspend():该措施并不甘休未成功的线程,它独自挂起线程,以后还可复原; 
Resume():恢复生机被Suspend()方法挂起的线程的进行;

 

C#四线程学习类别:

C#三十二线程学习(贰) 怎么着支配贰个线程
http://www.cnblogs.com/xugang/archive/2008/04/06/1138841.html

 

C#多线程学习(叁) 生产者和顾客
http://www.cnblogs.com/xugang/archive/2008/03/23/1118594.html

 

C#二十多线程学习(4) 10二线程的活动管理(线程池)
http://www.cnblogs.com/xugang/archive/2008/03/23/1118584.html

 

C#二十八线程学习(伍) 三十二线程的自发性管理(坚持计时器)
http://www.cnblogs.com/xugang/archive/2008/03/23/1118537.html

 

C#二10八线程学习(陆) 互斥对象
http://www.cnblogs.com/xugang/archive/2008/03/23/1118530.html

 

连锁小说:
DotNet线程难题解答

Visual
C#中动用线程

C#
线程能源共同方式总括

C#线程类别讲座(壹):BeginInvoke和EndInvoke方法

 

作者: XuGang   网名:钢钢
出处: http://xugang.cnblogs.com
声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址!

发表评论

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

网站地图xml地图