delay-timer 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
delay-timer 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
delay-timer 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
delay-timer 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
delay-timer 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
开发语言 Rust
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 槟橙
适用人群 未知
收录时间 2021-04-28

软件简介

delay-timer是一个基于时间轮算法构建的lib,它可以很方便地管理定时任务,或者周期性地执行任意任务。

轻松打造一个延迟/周期任务的运行容器。可以想象成crontab,但可以处理同步/异步任务,但支持动态添加/取消/删除/更新,
单个任务支持配置任务的最大并行数量,运行时间等。

底层运行时基于的smol和tokio(可选的feature),你可以用其中一个来构建你的应用程序。


v0.4.0 新功能:
    1.支持动态的修改运行中的任务。
    2.支持了insert任务后获取句柄`TaskInstancesChain`,可以动态获取运行中的任务实例`TaskInstance`。
      2.1. 运行中任务的任务实例可以动态取消。
      2.2. 取消分为三种方式:同步阻塞取消、超时限制取消、异步取消。
      2.3. 支持读取运行中任务的运行状态。
    3.支持获取内部异步子任务进程的输出。

更新依赖:

    替换 waitmap -> dashmap .
    升级 cron_clock .

更新examples:

    增加,async-std & tokio 使用案例。
    增加,动态取消运行中任务实例案例。

丰富了文档。


小例子:
创建一个异步的调度任务,支持如下。
任务描述: 每秒运行一次、只运行9次、最大并行运行数3、唯一id为:1.

``` rust

let body = create_async_fn_body!({
    // do something.
});

let task = TaskBuilder::default()
    .set_frequency_by_candy(CandyFrequency::CountDown(9, CandyCron::Secondly))
    .set_task_id(1)
    .set_maximun_parallel_runable_num(3)
    .spawn(body)?;


```

async-std 中的应用 :

``` rust

#[async_std::main]
async fn main() -> Result<()> {
    // Build an DelayTimer that uses the default configuration of the Smol runtime internally.
    let delay_timer = DelayTimerBuilder::default().build();

    // Develop a print job that runs in an asynchronous cycle.
    let task_instance_chain = delay_timer.insert_task(build_task_async_print())?;

    // Get the running instance of task 1.
    let task_instance = task_instance_chain.next_with_async_wait().await?;

    // Cancel running task instances.
    task_instance.cancel_with_async_wait().await?;

    // Remove task which id is 1.
    delay_timer.remove_task(1)?;

    // No new tasks are accepted; running tasks are not affected.
    delay_timer.stop_delay_timer()
}

```


 

tokio中的应用:

``` rust

#[tokio::main]
async fn main() -> Result<()> {
    // In addition to the mixed (smol & tokio) runtime
    // You can also share a tokio runtime with delayTimer, please see api `DelayTimerBuilder::tokio_runtime` for details.

    // Build an DelayTimer that uses the default configuration of the Smol runtime internally.
    let delay_timer = DelayTimerBuilder::default().build();

    // Develop a print job that runs in an asynchronous cycle.
    let task_instance_chain = delay_timer.insert_task(build_task_async_print())?;

    // Get the running instance of task 1.
    let task_instance = task_instance_chain.next_with_async_wait().await?;

    // Cancel running task instances.
    task_instance.cancel_with_async_wait().await?;

    // Remove task which id is 1.
    delay_timer.remove_task(1)?;

    // No new tasks are accepted; running tasks are not affected.
    delay_timer.stop_delay_timer()
}

```

 

非异步上下文的应用:

```

fn main() -> Result<()> {
    let delay_timer = DelayTimerBuilder::default().build();

    // Develop a print job that runs in an asynchronous cycle.
    let task_instance_chain = delay_timer.insert_task(build_task_async_print())?;

    // Develop an http request task that runs in an asynchronous cycle.
    delay_timer.add_task(build_task_async_request())?;

    // Get the running instance of task 1.
    let task_instance = task_instance_chain.next_with_wait()?;

    // Cancel running task instances.
    task_instance.cancel_with_wait()?;

    // Remove task which id is 1.
    delay_timer.remove_task(1)?;

    // No new tasks are accepted; running tasks are not affected.
    delay_timer.stop_delay_timer()?;

    Ok(())
}

```

##   repo: [delay-timer](https://github.com/BinChengZhao/delay-timer)

##   doc: [delay-timer-doc](https://docs.rs/delay_timer)

##   crates: [delay-timer-crates](https://crates.io/crates/delay_timer)

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2018/12/27 11:32

[UE4]Delay与Retriggerable Delay

一、Delay   在右上角都有一个表盘的图标,表示不是在当帧内执行,而是需要一定时间才能完成的。      鼠标移上去,会有一段文字注释。根据指定的延迟时间执行一个延后的动作。当计时还没有结束的时候,如果再次被调用的话,这个调用会被忽略,计时不会被重置。      如果在2秒内连续多次按下A键,屏幕上只会打印一次“A is Pressed” 二、Retriggerable Delay:可被再次被触发的Delay      在右上角也有一个表盘...

0
0
发表于软件架构专区
2015/07/14 13:58

timer_create ,timer_settime,timer_delete

NAME timer_create - create a per-process timer (REALTIME) SYNOPSIS #include <signal.h> #include <time.h> int timer_create(clockid_t clockid, struct sigevent *restrict evp, timer_t *restrict timerid); DESCRIPTION The timer_create() function shall create a per-process timer using the specified clock, clock_id, as the timing base. The timer_create() function shall return, in the location reference...

0
0
发表于大前端专区
2016/03/10 14:11

delay() 方法

delay() 方法对队列中的下一项的执行设置延迟。

0
0
2015/04/24 20:23

timer

  在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据、文件等。在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 TimerTask实现 ScheduledExecutorService实现 普通thread 这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下: 1 2 3 4 5 6 7 8 9 10...

0
0
发表了博客
2020/05/08 09:50

Timer

## java 定时任务 ``` public class TaskThread extends Thread{ @Override public void run() { Timer timer = new Timer(); // 5秒后执行,每隔5秒执行一次 timer.schedule(new TimerTask() { @Override public void run() { System.out.println("----设定要指定任务-----"); } },1000*5, 1000*5); } } public static void main(String[] args) { new TaskThread().run(); } ``` ## layui 静态资源使用 ``` 创建layuiadmin目录...

0
0
2019/09/03 23:28

clearInterval(timer)和timer = null的区别?

首先,clearInterval(timer)的作用只是将定时器停止,但是timer对象本身还是存在的,timer的值是一个ID,比如这样就可以重启: var timer=setInterval(function(){abc()},3000); //鼠标放上去关闭,离开再次启动 $("div").mouseover(function(){ clearInterval(timer);//关闭 }).mouseout(function(){ timer=setInterval(function(){abc()},3000) ;//重新启动 }); 所以,clearInterval(timer)达到保留对象的作用以便于再次使用这...

0
0
发表于开发技能专区
01/18 11:08

set_output_delay

今天在看tri_mode_ethernet_mac的学习实验代码时,发现有一个这样的写法: set_output_delay -0.9 -max -clock [get_clocks $rgmii_tx_clk] [get_ports {phyA_rgmii_txd[*] phyA_rgmii_tx_ctl}] set_output_delay -2.7 -min -clock [get_clocks $rgmii_tx_clk] [get_ports {phyA_rgmii_txd[*] phyA_rgmii_tx_ctl}] set_output_delay -0.9 -max -clock [get_clocks $rgmii_tx_clk] [get_ports {phyA_rgmii_txd[*] phyA_rgmii_...

0
0
发表了博客
2016/03/16 10:14

Timer定时器

简单的定时器使用: Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { //需要执行的事情 } }, long delay, long peroid); 参数说明: TimerTask:表示需要执行的任务。 delay:表示多久之后执行这个定时器任务(毫秒)。 peroid:表示第一次之后每次执行这个定时器的间隔(毫秒)。 Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { //需要...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
1 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部