MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    循环定时任务这样写对吗?

    开发交流
    2
    8
    551
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 何梓Black
      何梓Black 最后由 编辑

      // 线程调用服务
          val scheduler: ScheduledExecutorService = Executors.newScheduledThreadPool(3)
      
          // 启动循环
          fun startCycleTask(){
              scheduler.scheduleWithFixedDelay(task,100,200,TimeUnit.MICROSECONDS) // 指定间隔,调用之间的间隔 延时在前一次调用结束到下一次调用开始
              scheduler.scheduleAtFixedRate(task,100,200,TimeUnit.MICROSECONDS) // 指定频率,两次调用的间隔 延时在上一次调用开始到下一次调用开始
          }
      
          // 定时任务
          private val task = object :TimerTask(){
              override fun run() {
                  timerTask()
              }
              fun timerTask(){
                  scheduler.submit {
                      PluginMain.launch {
                          /* do something */
                          delay(1000) //  
                      }
                  }
              }
          }
      
      1 条回复 最后回复 回复 引用 0
      • cssxsh
        cssxsh 最后由 编辑

        你为什么要混合 java 线程 和 kotlin 协程

        1 条回复 最后回复 回复 引用 0
        • cssxsh
          cssxsh 最后由 编辑

          对于 你应该参考 文档里的 Java 线程生命周期管理

          https://github.com/mamoe/mirai/blob/dev/mirai-console/docs/plugin/JVMPlugin.md#java-线程生命周期管理

          请不要混合使用 java 线程 和 kotlin 协程
          尤其是你不清楚如何管理他们的时候

          何梓Black 2 条回复 最后回复 回复 引用 0
          • 何梓Black
            何梓Black @cssxsh 最后由 编辑

            @cssxsh 乐

            1 条回复 最后回复 回复 引用 0
            • 何梓Black
              何梓Black @cssxsh 最后由 编辑

              @cssxsh 那么我要使用协程进行定时循环的任务应该怎么做呢,么么

              cssxsh 1 条回复 最后回复 回复 引用 0
              • cssxsh
                cssxsh @何梓Black 最后由 编辑

                @何梓Black

                        launch { 
                            while (isActive) {
                                // do something
                                
                                launch { 
                                    // async do something
                                }
                                
                                delay(10_000)
                            }
                        }
                
                何梓Black 2 条回复 最后回复 回复 引用 0
                • 何梓Black
                  何梓Black @cssxsh 最后由 编辑

                  @cssxsh 感谢大佬么么

                  1 条回复 最后回复 回复 引用 0
                  • 何梓Black
                    何梓Black @cssxsh 最后由 编辑

                    @cssxsh 9e56c2e6-863f-4854-adc7-e53d07f67f6f-image.png
                    所以我可以把一个功能已经其关联协程这样写在一个ListenerHost中吗?

                    1 条回复 最后回复 回复 引用 0
                    • 1 / 1
                    • First post
                      Last post
                    Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact