zoukankan      html  css  js  c++  java
  • iOS 多线程相关 线程组

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
          dispatch_async(queue, ^{
              NSLog(@"1");
              //这句话的本质是往runloop中添加定时器
              [self performSelector:@selector(test) withObject:nil afterDelay:.0];
              NSLog(@"3");
              //若不启动runloop 子线程中是不会执行定时器的 打印结果为 1 3 执行了 打印结果为 1 3 2
              [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
          });
    }
    -(void)test{
        NSLog(@"2");
    }
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        NSThread *thred = [[NSThread alloc]initWithBlock:^{
            NSLog(@"1");
            //启动runloop 这时候runloop是处于休眠状态 等待后面给它发消息 ;如不执行 打印为1 并且崩溃 
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];
        }];
        [thred start];
        [self performSelector:@selector(test) onThread:thred withObject:nil waitUntilDone:YES];
    }
    -(void)test{
        NSLog(@"2");
    }

    线程组

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        dispatch_queue_t queue = dispatch_queue_create("myqueue", DISPATCH_QUEUE_CONCURRENT);
        dispatch_group_t group = dispatch_group_create();
        
        dispatch_group_async(group, queue, ^{
            for (int i =0; i<5; i++) {
                NSLog(@"1-%@",[NSThread currentThread]);
            }
        });
        dispatch_group_async(group, queue, ^{
            for (int i =0; i<5; i++) {
                NSLog(@"2-%@",[NSThread currentThread]);
            }
        });
        
    //    dispatch_group_notify(group, queue, ^{
    //        dispatch_async(dispatch_get_main_queue(), ^{
    //            for (int i =0; i<5; i++) {
    //                NSLog(@"3-%@",[NSThread currentThread]);
    //            }
    //        });
    //    }); 等价于下面
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            for (int i =0; i<5; i++) {
                NSLog(@"3-%@",[NSThread currentThread]);
            }
        });
    }
  • 相关阅读:
    修改mysql root 密码
    web.xml中contextConfigLocation的作用
    项目中提示找不到class,跟命名规则有关系RulesConfigDao
    myBatis抛出异常Result Maps collection already contains value ...
    mysql 远程访问授权
    maven项目依赖小试牛刀+私库
    eclipse中复制项目更名注意事项
    在eclipse中的tomcat内存设置
    广告宣传单页制作的注意事项
    Linux系统的负载与CPU、内存、硬盘、用户数监控的shell脚本
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/12269185.html
Copyright © 2011-2022 走看看