Function loop_time_check

Source
pub fn loop_time_check<F>(job: F, time_check: u64)
where F: FnOnce() + Send + 'static + Copy,
Expand description

将一个需要执行的函数当作闭包传递到子线程中循环执行,

Pass a function that needs to be executed as a closure to a child thread for loop execution,

循环的同时有一个时间循环的线程配套,

At the same time as the loop, there is a time loop thread matching,

需要执行的函数每执行一次,会更新一次执行时间

The execution time of the function that needs to be executed is updated every time it is executed

时间循环函数一次sleep时间为time_check,执行时间距离上次执行时间大于四倍time_check则退出循环

The time loop function has a sleep time of time_ Check, the execution time is greater than four times the last execution time_ Check to exit the loop

注意如果执行的函数中有阻塞(例如io输入),会发生时间循环子线程退出,函数执行循环子线程一直在等待直到有IO输入或者main函数退出

Note that if there is a block in the executed function (such as IO input), a time loop sub thread will exit, and the function execution loop sub thread will wait until there is IO input or the main function exits

§Example

use std::thread;
use std::time::Duration;
//需要循环一次的函数
//Functions that need to be iterated once
fn text_fn(i:u64) {
   let mut buffer = String::new();
   std::io::stdin().read_line(&mut buffer).unwrap();
   println!("text is {}",buffer);
   thread::sleep(Duration::from_secs(i));
   }
fn main() {   
   let time_check = 5;//单位为秒  Unit in seconds
     thread::spawn ( 
        move|| {
             time_check_loop::loop_time_check(move || {text_fn(1);},time_check); 
        }
    );
    loop{
    thread::sleep(Duration::new(5,0));
    };
}