CodingHanYa / workspace

workspace是基于C++11的轻量级异步执行框架,支持:通用任务异步并发执行、优先级任务调度、自适应动态线程池、高效静态线程池、异常处理机制等。
Apache License 2.0
916 stars 136 forks source link

new feature: timer scheduler #18

Closed firma2021 closed 1 year ago

firma2021 commented 1 year ago

新增功能:定时器调度器。 定时器调度器引用了一个线程池,定时向它引用的线程池中添加任务。线程池必须实现submit函数。

接口简介如下: submit(callable, seconds{1}, seconds{2}); 启动调度器1秒后向线程池添加任务,此后每2秒提交一次任务;该返回定时器的序号。 cancel(timer_id); 取消重复触发的定时器。 详细接口在interfaces/test_timer_scheduler_interface.cpp文件中展示。

实现: 定时器调度器单独使用一个线程,用堆或红黑树将用户添加的定时器按触发时间升序排序,通过条件变量的wait_for()函数睡眠触发时间最短的定时器的触发时间,苏醒后将定时器中的回调函数添加到线程池中。如果调度器没有引用线程池,将在调度器线程中执行该回调函数。

CodingHanYa commented 1 year ago

感谢你贡献的代码,我觉得这是一个很棒的功能!但遗憾的是我目前还不太希望Hipe去尝试一些任务流控制之类的功能。如果只加上定时调度的话,可能略显突兀了一些,我担心会让Hipe变得不够纯粹,希望你能理解。后续我会把你的版本整理在README文档中,向使用者推荐。再次感谢!