MiraiForum

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

    已解决 Mirai如何实现延时执行?

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

      机器人发消息是秒发,想让他更像人一样,延迟一下再发,然后我就想到了Thread.sleep
      但是因为Thread.sleep是暂停线程,我怕导致其他问题,所以请教一下大家,有什么好方法能达到延迟执行的目的吗?


      我本人开发使用语言是java,同时也欢迎Kotlin大佬来回答

      1 条回复 最后回复 回复 引用 0
      • Him188
        Him188 @Michael1015198808 最后由 Him188 编辑

        @michael1015198808 事件的执行共享 Kotlin 协程的全局线程池(可能有 64 个线程)。协程运行在线程中,少数协程的阻塞不会影响全局。但这些线程如果全部阻塞,将会导致不可确定的异常情况。建议使用专用的适合于 Java 的调度方式来进行延迟。

        1 条回复 最后回复 回复 引用 1
        • Nekoer
          Nekoer 摸鱼 最后由 编辑

          TimerTask?

          1 条回复 最后回复 回复 引用 0
          • RainChan
            RainChan 摸鱼 最后由 编辑

            java的话可能只能自己使用多线程或者是定时任务库来解决,如果是kotlin可以使用delay来延迟协程

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

              我是用Kotlin开发的,专门瞄了一眼Java的示例代码。
              eventChannel.subscribeAlways的本质是注册了一个回调,每当特定事件发生时,启动一个协程来运行这个回调函数。
              因此,Thread.sleep只是暂停这个协程,应该不会影响后续消息到来触发回调

              Him188 1 条回复 最后回复 回复 引用 0
              • Him188
                Him188 @Michael1015198808 最后由 Him188 编辑

                @michael1015198808 事件的执行共享 Kotlin 协程的全局线程池(可能有 64 个线程)。协程运行在线程中,少数协程的阻塞不会影响全局。但这些线程如果全部阻塞,将会导致不可确定的异常情况。建议使用专用的适合于 Java 的调度方式来进行延迟。

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