精华内容
参与话题
问答
  • dispatch

    2015-09-29 14:12:50
    1、dispatch_group_async的使用 dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。...

    1、dispatch_group_async的使用

    dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。下面是一段例子代码:

     

    1. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  
    2. dispatch_group_t group = dispatch_group_create();  
    3. dispatch_group_async(group, queue, ^{  
    4.     [NSThread sleepForTimeInterval:1];  
    5.     NSLog(@"group1");  
    6. });  
    7. dispatch_group_async(group, queue, ^{  
    8.     [NSThread sleepForTimeInterval:2];  
    9.     NSLog(@"group2");  
    10. });  
    11. dispatch_group_async(group, queue, ^{  
    12.     [NSThread sleepForTimeInterval:3];  
    13.     NSLog(@"group3");  
    14. });  
    15. dispatch_group_notify(group, dispatch_get_main_queue(), ^{  
    16.     NSLog(@"updateUi");  
    17. });  
    18. dispatch_release(group);  
    dispatch_group_async是异步的方法,运行后可以看到打印结果:

     

    2012-09-25 16:04:16.737 gcdTest[43328:11303] group1
    2012-09-25 16:04:17.738 gcdTest[43328:12a1b] group2
    2012-09-25 16:04:18.738 gcdTest[43328:13003] group3
    2012-09-25 16:04:18.739 gcdTest[43328:f803] updateUi

    每个一秒打印一个,当第三个任务执行后,upadteUi被打印。

     

    2、dispatch_barrier_async的使用

    dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

    例子代码如下:

     

    1. dispatch_queue_t queue = dispatch_queue_create("gcdtest.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT);  
    2. dispatch_async(queue, ^{  
    3.     [NSThread sleepForTimeInterval:2];  
    4.     NSLog(@"dispatch_async1");  
    5. });  
    6. dispatch_async(queue, ^{  
    7.     [NSThread sleepForTimeInterval:4];  
    8.     NSLog(@"dispatch_async2");  
    9. });  
    10. dispatch_barrier_async(queue, ^{  
    11.     NSLog(@"dispatch_barrier_async");  
    12.     [NSThread sleepForTimeInterval:4];  
    13.   
    14. });  
    15. dispatch_async(queue, ^{  
    16.     [NSThread sleepForTimeInterval:1];  
    17.     NSLog(@"dispatch_async3");  
    18. });  

    打印结果:

     

    2012-09-25 16:20:33.967 gcdTest[45547:11203] dispatch_async1

    2012-09-25 16:20:35.967 gcdTest[45547:11303] dispatch_async2

    2012-09-25 16:20:35.967 gcdTest[45547:11303] dispatch_barrier_async

    2012-09-25 16:20:40.970 gcdTest[45547:11303] dispatch_async3

    请注意执行的时间,可以看到执行的顺序如上所述。

    3、dispatch_apply 

    执行某个代码片段N次。
    dispatch_apply(5, globalQ, ^(size_t index) {
        // 执行5次

    }); 

    展开全文
  • vuex里面的this.$store.dispatch方法

    万次阅读 多人点赞 2019-07-09 16:03:52
    在store/modules文件夹里的user.js,声明user并释放出来。 const user = { state: { token: '', roles: null, isMasterAccount:true, }, mutations: { SET_TOKEN: (state, token) =>... state.token...

    main.js
    在这里插入图片描述
    store/index.js
    在这里插入图片描述
    在store/modules文件夹里的user.js,声明user并释放出来。

    const user = {
      state: {
        token: '',
        roles: null,
        isMasterAccount:true,
      },
    
      mutations: {
        SET_TOKEN: (state, token) => {
          state.token ="Bearer " +token 
        },
      },
      actions: {
        // 登录
        Login({
          commit
        }, userInfo) {
          return new Promise((resolve, reject) => {
            login(userInfo.account, userInfo.password).then(x => {
              if(x.status==200){
                const tokenV = x.data.token.tokenValue
                commit('SET_TOKEN', tokenV)
                document.cookie=`AuthInfo=Bearer ${tokenV};path:/`;
                token="Bearer "+tokenV;
                //setToken("Bearer " +token)
                resolve();
              }
              
            }).catch(error => {
              console.log("登录失败")
              reject(error)
            })
          })
        },
      }
    }
    
    export default user
    

    注:必须要用commit(‘SET_TOKEN’, tokenV)调用mutations里的方法,才能在store存储成功。

    handleLogin() {
       this.loading = true
                this.$store.dispatch('Login', this.loginForm).then(() => {
                    this.$router.push({
                        path: '/manage/merchant/account'
                    }); //登录成功之后重定向到首页
                    this.loading = false
                    // this.$router.push({ path: this.redirect || '/' })
                }).catch(() => {
                    this.loading = false
                })
    }
    

    this.$store.dispatch(‘Login’, this.loginForm)来调取store里的user.js的login方法,从而要更新。

    展开全文
  • dispatch_walltime的官方文档解释如下 Function dispatch_walltime // 根据系统时钟,创建一个绝对时间 Creates a dispatch_time_t using an absolute time according to the wall clock. Declaration dispatch_time_...

    dispatch_walltime的官方文档解释如下

    Function

    dispatch_walltime

    // 根据系统时钟,创建一个绝对时间
    Creates a dispatch_time_t using an absolute time according to the wall clock.

    Declaration

    dispatch_time_t dispatch_walltime(const struct timespec *when, int64_t delta);
    Parameters

    when

    // 一个时间结构体,如果传入NULL,方法会默认使用当前时间
    A struct timespec to add time to. If NULL is passed, then this function uses the result of gettimeofday.

    delta

    // 纳秒
    Nanoseconds to add.

    Return Value

    A new dispatch_time_t.

    Discussion

    // 基于gettimeofday的绝对时间
    The wall clock is based on gettimeofday(:😃.

    Time Constructs

    • dispatch_time
      Creates a dispatch_time_t relative to the default clock or modifies an existing dispatch_time_t.

    • dispatch_time_t
      An abstract representation of time.

    • DISPATCH_WALLTIME_NOW
      The current time.

    我们可以看出dispatch_walltime生成的是根据系统时钟的绝对时间,
    第一个参数可以为NULL,这样默认为当前时间
    第二个参数的单位为纳秒
    整个API的调用如下

    // 当前时间1秒后的时间
    dispatch_time_t time_t = dispatch_walltime(NULL, 1000 * 1000 * 1000);
    

    我们再来看一下我们常见的dispatch_time_t的创建方式:

    dispatch_time_t time_t2 = dispatch_time(DISPATCH_TIME_NOW, 1000 * 1000 * 1000);
    

    表面上看没有什么不同,普通的使用也不会出现什么区别.
    但是dispatch_walltime的定义为绝对时间,所谓绝对时间,就是不收到系统休眠等因素的影响,打比方说

    我们使用dispatch_walltime创建一个time1,使用dispatch_time创建一个time2 ,两个时间都是1个小时后的时间(12:15).我们用其创建两个定时器,对应事件后出发一个事件.

    • 如果系统和程序正常运行,在不考虑runloop的情况下,两个事件会如期同时出发.
    • 程序开始后,我们改变系统事件为13:00,再进入程序,这时time1对应的事件会立即触发.

    也就是说,dispatch_time是相对的计数时钟,而dispatch_walltime是绝对的系统时钟

    展开全文
  • 路过的大哥们帮忙看看,谢谢 vuex 如下: ``` const layoutModule = { state:{ userInfoId:{}, userHeadImgFile:{}, userHeadImg:...应该怎么正确调用commit,dispatch,getters呢?谢谢!
  • springBoot项目遇到了“Handler dispatch failed; nested exception is java.lang.StackOverflowError”的错误。总结一哈:StackOverflowError通常情况下是死循环或者是循环依赖了。Caused by: java.lang....

    欢迎大家关注我的公众号,添加我为好友!

    springBoot项目遇到了“Handler dispatch failed; nested exception is java.lang.StackOverflowError”的错误。

    总结一哈:

    StackOverflowError通常情况下是死循环或者是循环依赖了。

    Caused by: java.lang.StackOverflowError
    	at com.hry.seckill.service.impl.GoodsServiceImpl.getGoodsVoList(GoodsServiceImpl.java:17)
    	at com.hry.seckill.service.impl.GoodsServiceImpl.getGoodsVoList(GoodsServiceImpl.java:17)
    	at com.hry.seckill.service.impl.GoodsServiceImpl.getGoodsVoList(GoodsServiceImpl.java:17)
    	at com.hry.seckill.service.impl.GoodsServiceImpl.getGoodsVoList(GoodsServiceImpl.java:17)
    	at com.hry.seckill.service.impl.GoodsServiceImpl.getGoodsVoList(GoodsServiceImpl.java:17)
    	at com.hry.seckill.service.impl.GoodsServiceImpl.getGoodsVoList(GoodsServiceImpl.java:17)

     

    然后检查定位到的位置,发现错误:

     

     

    @Service
    public class GoodsServiceImpl implements GoodsService {
        @Autowired
        private GoodsService goodsService;

    我在Service中没有正确引用编写的Mapper而是引用了Service,所以报错,改正即可。

     

    @Service
    public class GoodsServiceImpl implements GoodsService {
        @Autowired
        private GoodsMapper goodsMapper;

    最后重启项目即可。

    欢迎大家关注我的公众号,添加我为好友!

    展开全文
  • Main Dispatch Queue和Global Dispatch Queue Main Dispatch: 是在主线程中执行的派发队列,因为主线程只有1个,所以MainDispatch Queue 是 Serial Dispatch Queue。 追加到Main Dispatch Queue的处理在主线程的...
  • Handler dispatch failed

    千次阅读 2019-12-06 18:07:41
    遇到的问题:本地环境没有...org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: com.sun.star.comp.servicemanager.ServiceMan...
  • 在使用flux进行数据交互的时候,出现了一个问题Flux Dispatch.dispatch(…): Cannot dispatch in the middle of a dispatch,在国内竟然没有找到解决方案,最后在https://stackoverflow.com上找到了解决方案,但是...
  • dispatch_sync 线程同步、dispatch_async线程异步 比如 //同步 dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSLog(@"dispatch_sync - 1"); }); dispa...
  • Vuex dispatch用法

    千次阅读 2019-10-25 18:10:31
    关于 数据 classTree 的变化 ... this.$store.dispatch('metamgr/getClassTreeData') }, 在 metamgr.js 里写入 import API from '@/api' const state = { // 类别数据 表格 树结构 classTreeData: []...
  • dispatch_group_t group = dispatch_group_create(); // 执行第一个下载任务 dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{ // 下载完毕... }); // 执行第二个下载任务 dispatch_group_...
  • org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: org.springframework.web.servlet.mvc.method.annotation....
  • dispatch_async和dispatch_sync。一个是异步不等待任务完成就返回,另一个是同步任务,需要等待任务完成。这两种提交任务的方式有所不同: dispatch_async :底层运用了线程池,会在和当前线程不同的线程上处理...
  • dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"刷新UI"); }); 就会被阻塞,但是这样写,就不会被阻塞 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ for ...
  • 初次学react,我在this.props中获取不到dispatch方法。为什么 @connect的信息科查看官网学习链接 原因在于mapDispatchToProps已经传入了 ```js //方法注入 const mapDispatchToProps = (dispatch) => { return...
  • Dispatch Sources

    2018-05-08 11:24:49
    在你需要与底层系统交互时,就要做好该交互任务会持续一段时间的准备了。无论是内核抑或是其他系统层级...GCD通过提供blocks 和 dispatch queues来使个人可以提交请求并取得结果报告。 关于Dispatch Sources Di...
  • GCD栅栏(dispatch_barrier)

    2019-05-29 20:44:15
    上一讲我们将到了GCD单次执行一个方法或者是多次执行一个方法.GCD单次执行与多次执行(disatch_once与dispatch_apply) 这一讲我们讲讲栅栏 栅栏,顾名思义就是把什么东西拦下来的方法. 函数 /// 不带参数 //dispatch_...
  • dispatch_source

    2019-09-20 04:30:41
    dispatch源(dispatch source)和RunLoop源概念上有些类似的地方,而且使用起来更简单。要很好地理解dispatch源,其实把它看成一种特别的生产消费模式。 dispatch源好比生产的数据,当有新数据时,会自动在dispatch...
  • useDispatch的用法

    2020-08-06 10:14:56
    作用:共享状态,返回Redux的store中对dispatch的引用,可执行redux中的方法 const dispatch=useDispatch()
  • Dispatch Group

    2018-04-06 16:57:45
    //在追加到Dispatch Queue中的多个处理全部结束后想执行结束处理时: //a.只使用一个Serial Dispatch Queue时,只要将想执行的处理全部追加到该 Serial Dispatch Queue中并在最后追加结束处理,即可实现。 //b.使用...
  • index.jsx 代码解析:在组件初次渲染时调用 model 中 命名空间为 a_models 的 getData 网络请求,传了一个patload 参数和 callback 回调函数过去,然后通过 this.setState ()更新视图的 state。...

空空如也

1 2 3 4 5 ... 20
收藏数 28,667
精华内容 11,466
关键字:

dispatch