• 多线程


    - (void)viewDidLoad {

        [super viewDidLoad];

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

    }

    - (IBAction)click:(id)sender {

    //新线程.

        //NSOperation是一个抽象的类,使用:自己定义一个类,继承它,使用系统提供的类:

        

      //NSOperation *p=nil;

    //    

    //    //1

    //    MyOperation *o=[[MyOperation alloc]init];

    //    [o start];

    //    //2

    //    NSInvocationOperation *o1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];

    //    [o1 start];

       //3

        

        NSBlockOperation *b=[NSBlockOperation blockOperationWithBlock:

                             ^{

                          [self test];

                             }

                             ];

        

        NSBlockOperation *c=[NSBlockOperation blockOperationWithBlock:

                             ^{

                                 [self test];

                             }

                             ];

        

        NSBlockOperation *d=[NSBlockOperation blockOperationWithBlock:

                             ^{

                                 [self test];

                             }

                             ];

        NSOperationQueue *queue=[[NSOperationQueue alloc]init];//队列

        queue.maxConcurrentOperationCount=2;//同时并发运行的线程为3;

        //同步执行,异步执行

        [c addDependency:b];

        [d addDependency:c];

        [queue addOperation:b];

        [queue addOperation:c];

        [queue addOperation:d];

        //执行没有顺序 。cpu开线程

     //   [b start];

        //多线程操作

    }

    - (void)test

    {

        int count=0;

        for (int i=0; i<635500000; i++) {

            count+=i;

        }

        NSLog(@"count1=%d",count);

        NSLog(@"%@,%d",[NSThread currentThread],count);

    }

    - (IBAction)gcdClick:(id)sender {

        

        //并发对列

        dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);//预设的参数,假的

        

        dispatch_async(queue, ^{

            NSLog(@"线程1");

            NSLog(@"++%@",[NSThread currentThread]);//打印主线程

            

            for (int i=0; i<10; i++) {

                

                NSLog(@"%d",i);

            }

            

        });

        

        dispatch_async(queue, ^{

            NSLog(@"线程2");

            

        });

        

        dispatch_async(queue, ^{

            NSLog(@"线程3");

            

        });

    }

    - (IBAction)gcd02:(id)sender

    {

        //创建串行并列

        dispatch_queue_t queue =dispatch_queue_create("net.scjy.queue", NULL);

        

        dispatch_async(queue, ^{

            NSLog(@"任务1");

            NSLog(@"++0%@",[NSThread currentThread]);//打印主线程

            

            //回到主界面

         //    dispatch_async(dispatch_get_main_queue(), ^{self->imgview=img});

        });

        

        dispatch_async(queue, ^{

            NSLog(@"任务2");

            NSLog(@"++00%@",[NSThread currentThread]);//打印主线程

        });

        

        dispatch_async(queue, ^{

            NSLog(@"任务3");

            NSLog(@"++000%@",[NSThread currentThread]);//打印主线程

        });

    }

  • 相关阅读:
    我的插件架构
    .net 处理图片亮度
    封装自己的对称加密模块
    漏洞无处不在之窃取你的QQ信息
    写自己的自动升级模块
    抓到一只网马,发文顺便鄙视下360
    .net 3.5的Socket异步完成端口
    检测本机是否登录了指定QQ账号
    C++/CLR写的Data Blocks
    修改的Vista风格多功能日历Demo
  • 原文地址:https://www.cnblogs.com/linximu/p/4402829.html
Copyright © 2020-2023  润新知