📄 timer.c
字号:
/******************************************************** * Egui code,LGPL * Function : Timer for EGui * Author: fishbaoz@hotmail.com * Data : 2006-03-15 * $Id: timer.c,v 1.7 2006/04/13 22:52:54 baozheng Exp $ ********************************************************//* O (_) _ )_( _ /`_) H (_`\ .' ( { } ) '. _/ /` '-'='-' `\ \_ [_.' _,...,_ '._] | .:"`````":. | |__//_________\\__| | .-----------. | | | .-"""-. | | | | / / \ | | | ||- < -|| | | | \ \ / | | | |[`'-...-'`]| | | | ;-.___.-; | | | | | ||| | | | | | | ||| | | | | | | ||| | | | | | | ||| | | | | | | ||| | | | | | | _|||_ | | | | | | >===< | | | | | | |___| | | | | | | ||| | | | | | | ;-; | | | | | | ( ) | | | | | | '-' | | | | | '-------' | | _| '-----------' |_ [= === === ==== == =] [__--__--___--__--__] /__-___-___-___-___-__\ `"""""""""""""""""""""""` */#include <stdio.h>#include <stdlib.h>#include <Egui.h>#define GET_MS(sec) (1*(sec))egui_timer_list_t egui_timer_list_table={(egui_timer_t*)&egui_timer_list_table, (egui_timer_t*)&egui_timer_list_table};egui_timer_list_t *egui_timer_list=&egui_timer_list_table;voidEgui_timer_init(){ gettimeofday (&(egui_timer_list->start_msec), NULL); gettimeofday (&(egui_timer_list->last_msec), NULL); }/* allocate and initialize a new timer node */egui_timer_t *Egui_timer_new(){ egui_timer_t *new_timer; new_timer = (egui_timer_t *)malloc (sizeof(egui_timer_t)); new_timer -> prev = NULL; new_timer -> next = NULL; new_timer -> delta_interval = 0; new_timer -> function = NULL; new_timer -> parameter = NULL; return new_timer;}void Egui_timer_free(egui_timer_t *p_timer){ free(p_timer);}/* insert interval=3: 3 insert interval=4: 3 -> 1 insert interval=4: 3 -> 1 -> 0 insert interval=8: 3 -> 1 -> 0 -> 4 insert interval=10: 3 -> 1 -> 0 -> 4 -> 2 insert interval=2: 2 -> 1 -> 1 -> 0 -> 4 -> 2 */void Egui_timer_insert(unsigned int interval, timer_callback_t function, unsigned int *para){ egui_timer_t *new_timer, *index; unsigned int delta_interval; new_timer = Egui_timer_new(); new_timer ->function = function; new_timer ->parameter = para; /* search the whole list, insert the whole list at a proper position */ for(index = ((egui_timer_t *)egui_timer_list)->next, delta_interval = GET_MS(interval); ; index = index->next) { if (delta_interval == 0 || /* we have got it, it is "<0" probably */ (index==(egui_timer_t *)egui_timer_list)) /* end of whole list */ break; if ( delta_interval < index->delta_interval ) /* we've got it */ { index->delta_interval -= delta_interval; break; } delta_interval -= index->delta_interval; } /* got it, didnt we? */ new_timer ->delta_interval = delta_interval; /* insert before index */ new_timer ->prev = index->prev; new_timer ->next = index; index->prev->next = new_timer; index->prev = new_timer;}static unsigned intget_elapse(){ struct timeval current; struct timeval elapsed; gettimeofday (¤t, NULL); if (egui_timer_list->last_msec.tv_usec > current.tv_usec) { current.tv_usec += 1000000; current.tv_sec--; } elapsed.tv_sec = current.tv_sec - egui_timer_list->last_msec.tv_sec; elapsed.tv_usec = current.tv_usec - egui_timer_list->last_msec.tv_usec; /* update the timer */ egui_timer_list->last_msec = current; return (elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000);}/* */void Egui_timer_handler(){ egui_timer_t *index, *tmp; signed int elapsed_time; /* if the whole list is empty, return */ elapsed_time = 0 - get_elapse(); for(index = ((egui_timer_t *)egui_timer_list)->next; index!=(egui_timer_t *)egui_timer_list; tmp = index, index = index->next, Egui_timer_free(tmp)) { elapsed_time += index->delta_interval; if (elapsed_time > 0) { index->delta_interval = elapsed_time; break; /* we still have to wait. */ } /* got one, delete it from the queue. */ egui_timer_list->first = index->next; index->next->prev = (egui_timer_t *)egui_timer_list; if (index->function) index->function (index->parameter); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -