多线程的简单应用

全局并发队列//添加touch事件显示图片
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//1获得主队列 线程之间的通讯
//异步并行
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//执行操作
NSString *[email protected]"http://a.hiphotos.baidu.com/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=1dc843d302087bf469e15fbb93ba3c49/6a63f6246b600c338719a2501a4c510fd8f9a1c1.jpg";
NSURL *url=[NSURL URLWithString:str];
NSData *data=[NSData dataWithContentsOfURL:url];
UIImage *image=[UIImage imageWithData:data];
//回到主线程显示图片
dispatch_async(dispatch_get_main_queue(), ^{
self.imageview.image=image;
});

});
}

//-------------------
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//执行耗时的异步操作

dispatch_async(dispatch_get_main_queue(), ^{
//回到主线程,执行ui刷新操作
});

});

全局并发队列 手动创建串行队列 主队列
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) dispatch_queue_create("queue名字", nil) dispatch_get_main_queue()
同步sync 没有开启新线程(不具备开启新线程的能力) 串行执行任务 没有开启新线程 串行执行任务 没有开启新线程 串行执行任务(死循环)
异步async 有开启新线程(具备开启新线程的能力) 并发执行任务 有开启新线程 串行执行 任务 有开启新线程 串行执行任务

//点击事件下载图片 两张图片合成一张图片显示
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
dispatch_group_t group=dispatch_group_create();
__block UIImage *image1=nil;
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
image1=[self imageWithurl:@"http://news.xinhuanet.com/mil/2015-08/21/128150615_14401105350931n.jpg"];
});

__block UIImage *image2=nil;
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
image2= [self imageWithurl:@"http://news.xinhuanet.com/mil/2015-08/21/128150615_14401105352811n.jpg"];
});

dispatch_group_notify(group, dispatch_get_main_queue(), ^{
self.image1.image=image1;
self.image2.image=image2;
//合并图片
UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 120), NO, 0.0);
[image1 drawInRect:CGRectMake(0, 0, 100, 120)];
[image2 drawInRect:CGRectMake(100, 0, 100, 120)];
self.addimage.image=UIGraphicsGetImageFromCurrentImageContext();
//关闭上下文
UIGraphicsEndImageContext();
});
}

//请求一个图片
-(UIImage *)imageWithurl:(NSString *)urlstr{
//1
NSURL *url=[NSURL URLWithString:urlstr];
NSData *data=[NSData dataWithContentsOfURL:url];
UIImage *image=[UIImage imageWithData:data];
NSLog(@"转图片");
return image;
}

时间: 2024-10-29 19:07:24

多线程的简单应用的相关文章

gdb调试多线程的简单命令

由于平时的编程当中经常会用到多线程,我想接触过多线程编程的人应该都会清楚多线程如果出了错,调起bug来是有多么麻烦,应为你某个地方出错了,有可能并不是这里的问题而是线程执行到这就切换到其他线程,而出错的是其他线程,我以前使用的办法是给某个线程sleep然后让内核自己调度去执行其他线程.很明显这种方法当有很多线程是并不是很使用,所以我就翻书学了几条调试多线程的简单gdb命令 1.测试所用的代码 1void *thread1(void *arg) 2{ 3 printf("New thread1\n

Java多线程之简单的线程同步实例

数据类: package Thread.MyCommon; public class Data { public int num = 0; public synchronized int getEven() { ++num; Thread.yield();//让另外线程先执行,加大测试效果几率 ++num; return num; } } 线程类: package Thread.MyCommon; public class myThread implements Runnable { priva

JAVA学习第六十课 — UDP协议 &基于多线程模拟简单的QQ聊天程序

UDP传输 UDP有发送端和接受端,有两大类,DatagramSocket.DatagramPacket 建立发送端和接收端 建立数据包 调用Socket的接收发送方法 关闭Socket 注意:发送端和接收端是两个独立的运行程序 UDP发送端演示 DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号. public static voi

Java 多线程IO简单实用Demo

多线程主要作用是充分利用Cpu,而不在于它的乱序性.本Demo不讲它竞争什么的.之前看过乱序打印ABC的例子什么的,那些有意义吗? 本Demo 是多线程打印文件夹下的文件,主要实现是用数组存放文件,一个游标遍历. 我们需要考虑在什么时候加互斥访问,本例用synchronized . 先考虑单线程的流程:客户端启动-->读取文件下的文件放到数组(IO)--> 取游标打印 ,游标加1 -- > 改文件写文件(IO) -- 重复上两步至越界 -- 结束 多线程时显然需要在"取游标打印

多线程中简单的++操作,所引发的思考

一句简单的g_nLoginCount++操作,转换成汇编语言就成了上面的三句话,假如现在我们有两个线程,当第一个线程执行到第二个汇编时,此时第二个线程启动,他又从内存中读取g_nLoginCount,但这时第一个线程已经将g_nLoginCount做了加法操作,只是没有将其移回内存,这样的话这个加法操作形同虚设,这样计算的结果是不可预知的!!!! 多线程中简单的++操作,所引发的思考

C#多线程的简单例子

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; //using System.Threading.Tasks; using System.IO; using System.Collections; namespace ConsoleApplication2 { class program { static void Main(

Cr多线程编程简单实例

国家using System; using System.Collections;using System.Collections.Generic;using System.Threading; /// <summary>/// 在开发中经常会遇到线程的例子,如果某个后台操作比较费时间,我们就可以启动一个线程去执行那个费时的操作,同时程序继续执行.在某些情况下可能会出现多个线程的同步协同的问题,下面的例子就展示了在两个线程之间如何协同工作.//////这个程序的思路是共同做一件事情(从一个Ar

C++多线程编程简单实例

C++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面就此简单的讲一下: 创建线程的函数 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize,                       // initial stack size LPTHREAD_START_ROUTINE lpStartAddress,

多线程实现简单的事件异步处理框架

老实说,多线程在web开发里面非常常见,很多web容器本身就支持多线程,所以很多时候我们在进行web开发的时候并不需要考虑多线程相关的负责问题,而只需要实现相关的业务功能即可.所以,可以概括地讲,很多时候的web开发,并没有多线程方面的考虑,因为web应用本身就是在多线程基础上的了. 但是,有些时候为了提高程序性能,在用户的一个请求中中如果包含过多的业务操作或者包含耗时比较长的业务操作,我们就需要考虑使用异步的方式来提高程序响应的速度了.这篇博客简单介绍了在java中如何使用多线程实现一个简单的

多线程的简单使用

NSOperationQueue的简单使用过程: 1.  建立一个NSOperationQueue的对象 2.  建立一个NSOperation的对象 3.  将operation加入到NSOperationQueue中 MRC 需要手动释放 4.  release掉operation NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperati