进程和线程

来源:互联网 发布:sql解决方案资源管理器 编辑:程序博客网 时间:2024/05/17 07:13

    1 、进程和线程:

    进程:是具有一定独立功能的程序关于某个数据集合上的一次活动,使系统进行资源分配和调度的独立单位,可以把进程看作一个独立的程序。

     线程:是进程的一个实体,是cpu调度和分派的基本单位,是比进程更小的能够独立运行的基本单位,只拥有一点在运行中必不可少的资源,除此之外,基本上不拥有系统资源。一个线程可以创建和撤销另一个线程。

      关系:

       一个进程至少有一个线程,一个线程只能属于一个进程。

       资源分配给进程,同一进程的所有线程共享进程的所有资源。

       处理机分给线程,即真正在处理机工作的是线程。

       进程在执行过程中有独立的内存单元,同一进程的多个线程共享内存单元。

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

    

     2、创造一个线程:需要有一个函数或者方法作为线程的主入口点。

      开始一个线程

      (1)类方法:

          

      detachNewThreadSelectortoTargetwithObject:   ;

     例如:

     

    //创建一个自动执行的线程出来

    [NSThreaddetachNewThreadSelector:@selector(startTheBackGroundJob:)toTarget:selfwithObject:nil];

       
     (2)创造一个新的线程并调用start方法:

        例如;

      NSThread secondThread = [[NSThreadalloc]initWithTarget:selfselector:@selector(run:)object:nil];

    [_secondThreadstart];


    

       (3)不显式创建线程的方法:


       用NSObject的类方法  performSelectorInBackground:withObject: 创建一个线程:
     [Obj performSelectorInBackground:@selector(doSomething) withObject:nil];  


    

    3、 代码实现:


    首先,创建一个单视图工程:

    然后,在xib文件上添加控件(2个label,1个按钮,1个进度条),布局如图

        
           
      然后,在RootViewController.h文件中关联属性和方法,最后生成的代码:
          

#import <UIKit/UIKit.h>


@interface RootViewController :UIViewController

@property (retain,nonatomic)IBOutletUILabel *label;

@property (retain,nonatomic)IBOutletUILabel *label2;

@property (retain,nonatomic)IBOutletUIProgressView *myProcess;

@property (retain,nonatomic)IBOutletUIButton *pressedButton;

- (IBAction)btnPressed:(id)sender;



@end



      在RootViewController.m文件代码:
    
    

#import "RootViewController.h"


@interface RootViewController ()


@end


@implementation RootViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

   self = [superinitWithNibName:nibNameOrNilbundle:nibBundleOrNil];

   if (self) {

        

        self.tabBarItem.title =@"Thread_1";

    }

    return self;

}


- (void)viewDidLoad

{

    [superviewDidLoad];

    

   self.myProcess.progress =0;

    

    self.label2 .text = [NSStringstringWithFormat:@"%.2f",self.myProcess.progress];

    

    

}


- (void)didReceiveMemoryWarning

{

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


- (void)dealloc {

    [_labelrelease];

    [_label2release];

    [_myProcess release];

    [_pressedButtonrelease];

    [_myProcess release];

    [_myProcess release];

    [superdealloc];

}

- (IBAction)btnPressed:(id)sender

{

    //创建一个状态为自动隐藏的按钮

    self.pressedButton.hidden =YES;

    //创建一个自动执行的线程

    [NSThreaddetachNewThreadSelector:@selector(startThreadBack:)toTarget:selfwithObject:nil];

}

//子线程开启的方法

- (void)startThreadBack:(id)sender

{

    [selfperformSelectorOnMainThread:@selector(updateProgressView:)withObject:nilwaitUntilDone:NO];

    

}

//完成界面的更新

- (void)updateProgressView :(id)sender

{

   self.myProcess.progress +=0.1;

    

   float value =self.myProcess .progress;

    

   if(value <1)

    {

        [NSTimerscheduledTimerWithTimeInterval:0.5target:selfselector:@selector(updateProgressView:)userInfo:nilrepeats:NO];

    }

   else

    {

       self.pressedButton.hidden =NO;

    }

    

   self.label2.text = [NSStringstringWithFormat:@"%.2f",value];

    

    

}



@end

 


     然后,运行,点击按钮,结果如下:

    
0 0
原创粉丝点击