线程间的通信 代码

#import "ViewController.h"

@interface ViewController ()

//图片框 UIImageView

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

//创建一条子线程来执行下载这种耗时操作  点击的方法

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

//    要下载的图片

NSString *urlString = @"http://p1.yokacdn.com/pic/star/topic/2011/U288P1T117D414828F2577DT20110902111814.jpg";

// 1.在子线程下图片

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(downloadWebImage:) object:urlString];

//    放到可调用线程池里面

[thread start];

}

// 下载网络图片  下载的方法

-(void)downloadWebImage:(NSString *)urlString

{

NSLog(@"downloadWebImageBegan:%@",[NSThread currentThread]);

// 统一资源定位符 1>把要下载的图片的地址传给统一资源定位符

NSURL *url = [NSURL URLWithString:urlString];

// 下载图片数据  Contents 内容  下载的内容 2>把统一资源定位符转为数据

NSData *data = [NSData dataWithContentsOfURL:url];

// 转换图片  3>把数据转为图片

UIImage *image = [UIImage imageWithData:data];

// 2.在主线程显示图片

//  [self performSelectorOnMainThread:@selector(setupImage:) withObject:image waitUntilDone:YES];

//    当图片在子线程下载完以后,会在主线程进行显示

[self performSelector:@selector(setupImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];

//    打印当前线程

NSLog(@"downloadWebImageEnd:%@",[NSThread currentThread]);

}

// 设置图片

- (void)setupImage:(UIImage *)image

{

NSLog(@"setupImage:%@",[NSThread currentThread]);

// 显示图片

self.imageView.image = image;

}

@end

时间: 2024-08-09 21:10:17

线程间的通信 代码的相关文章

线程(二)__线程间的通信

线程间的通信:多个线程在处理同一资源,但是任务却不同.一.等待唤醒机制涉及的方法:1.wait();让线程处于冻结状态,被wait的线程会被存储到线程池中2.notify();唤醒线程池中的一个任意线程3.notifyAll();唤醒线程池中的所有线程这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法,必须要明确到底操作的是哪个锁上的线程wait()对A锁上面的线程进行操作后只能用A锁的notify来唤醒.被wait之后的线程可认为放在线程池中. 为什么操作线程的方法wait no

VC++多线程编程-线程间的通信和线程同步

引用:http://blog.csdn.net/zjc0888/article/details/7372258 线程间通讯 一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信.这种线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的,下面将进行说明. 使用全局变量进行通信 由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量.对于标准类型

新建线程与UI线程间的通信

现在用一个实例来演示一下自己的新建线程与UI线程间的通信. UI界面包含3个控件: 一个输入框,用来输入数字: 一个显示框,用来显示从2开始,到输入数字之间的所有质数: 一个按钮,点击后获取输入框输入的数字,交给新建线程处理,线程计算质数后把结果传给UI线程,UI线程显示结果到显示框. XML如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android=&q

网络开始---多线程---线程间的通信(掌握)(五)

1 #import "HMViewController.h" 2 3 @interface HMViewController () 4 @property (weak, nonatomic) IBOutlet UIImageView *imageView; 5 @end 6 7 @implementation HMViewController 8 9 - (void)viewDidLoad 10 { 11 [super viewDidLoad]; 12 // Do any additi

iOS多线程技术—线程间的通信

iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelector:(SE

iOS开发多线程篇—线程间的通信

iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelector:(SE

Handler不同线程间的通信

转http://www.iteye.com/problems/69457 Activity启动后点击一个界面按钮后会开启一个服务(暂定为padService),在padService中会启动一个线程(暂定为Thread-3)发起Socket连接.我们项目中使用mina作为socket通信框架,用过mina的同志们应该熟悉,Thread-3只是负责监听,具体的消息处理是另外的线程.在我们的IoHandler中处理消息,现在的问题是,我需要在IoHander的sessionOpened方法中给Act

第一篇:线程间的通信

  1.线程间的通信:在一个进程中,线程往往不是独立存在的,多个线程之间需要经常进行通信. 2.线程间通信的体现: 一个线程传递数据给另一个线程 在一个线程执行完特定任务后,转到另一个线程继续执行任务 3.线程间通信常用方法: —(void)performSelectorOnMainThread:(SEL)aselector  withObject:(id)arg waitUntilDone:(BOOL)wait; —(void)performSelector:(SEL)aselector on

多线程(六)线程间的通信和协作

系统要实现某个全局功能必定要需要各个子模块之间的协调和配合,就像一个团队要完成某项任务的时候需要团队各个成员之间密切配合一样.而对于系统中的各个子线程来说,如果要完成一个系统功能,同样需要各个线程的配合,这样就少不了线程之间的通信与协作.常见的线程之间通信方式有如下几种: 1.wait和notify/notifyAll  2.await和signal/signalAll   3.sleep/yield/join  4.CyclicBarrier 栅栏  5.CountDownLatch 闭锁