46 lines
		
	
	
		
			745 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			745 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "rtthread.h"
 | |
| #include "stdlib.h"
 | |
| #include "stdint.h"
 | |
| #include "stdio.h"
 | |
| 
 | |
| 
 | |
| typedef struct{
 | |
|   void (*later_fun)(void *t);
 | |
|   void *t;
 | |
|   rt_timer_t timer;
 | |
| }later_def;
 | |
| 
 | |
| 
 | |
| static void later_fun_exe(void *t)
 | |
| {
 | |
|   later_def *l=t;
 | |
|   rt_timer_delete(l->timer);
 | |
|   if(l->later_fun){
 | |
|     l->later_fun(l->t);
 | |
|   }
 | |
|   free(l);
 | |
| }
 | |
| 
 | |
| // 延迟一段时间调用函数
 | |
| void later_execute(void (*fun)(void *t),void *t,int ms)
 | |
| {
 | |
|   static uint16_t count;
 | |
| 	char s1[16]={0};
 | |
| 	sprintf(s1,"later_t#%d",count);
 | |
|   later_def *l=calloc(1,sizeof(later_def));
 | |
|   l->later_fun=fun;
 | |
|   l->t=t;
 | |
|   l->timer=rt_timer_create(s1,later_fun_exe,l,
 | |
|     rt_tick_from_millisecond(ms),
 | |
|     RT_TIMER_FLAG_ONE_SHOT|RT_TIMER_FLAG_SOFT_TIMER);
 | |
|   rt_timer_start(l->timer);
 | |
|   count++;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | 
