进程和线程
来源:互联网 发布:sql解决方案资源管理器 编辑:程序博客网 时间:2024/05/17 07:13
1 、进程和线程:
进程:是具有一定独立功能的程序关于某个数据集合上的一次活动,使系统进行资源分配和调度的独立单位,可以把进程看作一个独立的程序。
线程:是进程的一个实体,是cpu调度和分派的基本单位,是比进程更小的能够独立运行的基本单位,只拥有一点在运行中必不可少的资源,除此之外,基本上不拥有系统资源。一个线程可以创建和撤销另一个线程。
关系:
一个进程至少有一个线程,一个线程只能属于一个进程。
资源分配给进程,同一进程的所有线程共享进程的所有资源。
处理机分给线程,即真正在处理机工作的是线程。
进程在执行过程中有独立的内存单元,同一进程的多个线程共享内存单元。
线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的方法实现同步。
2、创造一个线程:需要有一个函数或者方法作为线程的主入口点。
开始一个线程
(1)类方法:
detachNewThreadSelector: toTarget: withObject: ;
例如:
//创建一个自动执行的线程出来
[NSThreaddetachNewThreadSelector:@selector(startTheBackGroundJob:)toTarget:selfwithObject:nil];
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个进度条),布局如图
#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
#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
- 进程和线程
- 关于进程和线程
- 进程和线程
- 进程和线程
- 小解进程和线程
- 进程和线程
- 理解进程和线程
- 进程和线程
- 进程和线程
- 进程和线程 编程
- 进程和线程
- 进程和线程
- 线程和进程
- 进程和线程编程
- 程序、进程和线程
- 进程和线程 区别
- 进程和线程编程
- 什么是线程和进程
- mysql 查询重复数据
- 关于oracle 拆分字符串加列转行的问题
- matlab 计算图像的峰值信噪比PSNR以及均方根误差MSE
- PL/SQL Developer远程连接Oracle的配置
- cocos2d-x编译问题集合之error C2440: “类型转换”: 无法从“void (__thiscall ::* )(void)”转换为“
- 进程和线程
- 编译时给出警告的小trick,利用下标溢出的警告
- ccjoystick 代码 (学习 )
- 色彩空间
- redis系列-redis的连接
- java桥牌发牌算法
- 排序算法(四):快速排序
- 基于STM32的USB程序开发笔记(四)——USB设备的枚举(上)
- 利用正则表达式判断字符串是否为数字(c++)