65 lines
1.7 KiB
C
65 lines
1.7 KiB
C
#include "mywin_inc.h"
|
||
|
||
// 清零定时器
|
||
int WIN_TimerReload(int timerId) {
|
||
WIN_GetWinStruct()->softTimer[timerId - 1].time_ms = 0;
|
||
return 0;
|
||
}
|
||
|
||
// 设置定时器周期
|
||
int WIN_SetTimerCycle(int timerId, int cycle) {
|
||
WIN_GetWinStruct()->softTimer[timerId - 1].cycle_ms = cycle;
|
||
return 0;
|
||
}
|
||
|
||
// 添加定时器,成功返回id,失败返回0
|
||
int WIN_CreatTimer(WIN_WindowStruct *win, u32 ms) {
|
||
for (int i = 0; i < WIN_SOFTTIMER_MAXNUM; i++) {
|
||
if (WIN_GetWinStruct()->softTimer[i].win == 0) {
|
||
WIN_GetWinStruct()->softTimer[i].win = win;
|
||
WIN_GetWinStruct()->softTimer[i].cycle_ms = ms;
|
||
WIN_GetWinStruct()->softTimer[i].time_ms = 0;
|
||
return i + 1;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
// 删除指定定时器失败返回-1,成功返回0
|
||
int WIN_DeleteTimer(int id) {
|
||
if (id >= WIN_SOFTTIMER_MAXNUM)
|
||
return -1;
|
||
if (id <= 0)
|
||
return -1;
|
||
WIN_GetWinStruct()->softTimer[id - 1].win = 0;
|
||
return 0;
|
||
}
|
||
|
||
// 删除窗口创建的所有定时器
|
||
int WIN_WinDeleteTimer(WIN_WindowStruct *win) {
|
||
for (int i = 0; i < WIN_SOFTTIMER_MAXNUM; i++) {
|
||
if (WIN_GetWinStruct()->softTimer[i].win == win) {
|
||
WIN_GetWinStruct()->softTimer[i].win = 0;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
// 定时器工作
|
||
void WIN_TimerWork(void) {
|
||
WIN_MsgStruct msg = {0};
|
||
u32 timePast = WIN_GetTimePast();
|
||
for (int i = 0; i < WIN_SOFTTIMER_MAXNUM; i++) {
|
||
if (WIN_GetWinStruct()->softTimer[i].win) {
|
||
WIN_GetWinStruct()->softTimer[i].time_ms += timePast;
|
||
if (WIN_GetWinStruct()->softTimer[i].time_ms >=
|
||
WIN_GetWinStruct()->softTimer[i].cycle_ms) {
|
||
WIN_GetWinStruct()->softTimer[i].time_ms = 0;
|
||
msg.msg = WIN_MSG_TIMER;
|
||
msg.data.v = i + 1; // 填充定时器id
|
||
WIN_SendMsg(0, WIN_GetWinStruct()->softTimer[i].win, &msg);
|
||
}
|
||
}
|
||
}
|
||
}
|