1/** 2 * @file Describe the file 3 * Copyright (c) 2023 Huawei Device Co., Ltd. 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17import systemTimer from '@ohos.systemTimer'; 18import { AsyncCallback } from '@ohos.base'; 19import { Log } from './Log'; 20 21const TAG = 'SystemTimerUtils'; 22 23/** 24 * 创建一个定时器 25 * 26 * @param options 定时器选项,数据结构参考系统api:SystemTimer 27 * @param callback 定时器的回调函数,到达定时器的触发时间时回调 28 */ 29export async function createTimer(options: systemTimer.TimerOptions, callback?: AsyncCallback<number>): Promise<number | void> { 30 let timerId: number | void; 31 if (callback !== null && callback !== undefined) { 32 timerId = systemTimer.createTimer(options, callback); 33 } else { 34 timerId = systemTimer.createTimer(options, (err, timerId) => { 35 if (err?.message !== undefined) { 36 Log.error(TAG, 'failed to create a Timer because:' + err?.message); 37 } 38 Log.debug(TAG, "A Timer has been created and Timer ID is:" + timerId); 39 }) 40 } 41 return timerId; 42} 43 44/** 45 * 开启一个定时器 46 * 系统定时器会去比对 currentTime 与 triggerTime的差值 47 * 若差值小于5000ms则设置触发时间 triggerTime 为 currentTime+5000 48 * 若差值大于5000ms则正常设置触发时间 triggerTime 为传入的时间 49 * 若 currentTime(定时器内部时间)大于 triggerTime,则不会开启定时器 50 * 51 * @Param timer The timer ID. 52 * @Param triggerTime 触发时间 53 */ 54export function startTimer(timer: number, triggerTime: number, callback?: AsyncCallback<void, void>): void { 55 if (callback !== null && callback !== undefined) { 56 systemTimer.startTimer(timer, triggerTime, callback); 57 } else { 58 systemTimer.startTimer(timer, triggerTime, (err) => { 59 if (err?.message !== undefined) { 60 Log.error(TAG, 'failed to startTimer because:' + err?.message); 61 } 62 Log.debug(TAG, "a Timer start,and this Timer will callback when: " + triggerTime); 63 }) 64 } 65} 66 67/** 68 * 停止一个定时器 69 * 70 * @Param timer The timer ID. 71 */ 72export function stopTimer(timer: number, callback?: AsyncCallback<void, void>): void { 73 if (callback !== null && callback !== undefined) { 74 systemTimer.stopTimer(timer, callback); 75 } else { 76 systemTimer.stopTimer(timer, (err) => { 77 if (err?.message !== undefined) { 78 Log.error(TAG, 'failed to stop Timer because:' + err?.message); 79 } 80 Log.debug(TAG, "a timer has been stopped,and this Timer id is: " + timer); 81 }) 82 } 83} 84 85/** 86 * 摧毁一个定时器 87 * 88 * @Param timer The timer ID. 89 */ 90export function destroyTimer(timer: number, callback: AsyncCallback<void, void>): void { 91 if (callback !== null && callback !== undefined) { 92 systemTimer.destroyTimer(timer, callback); 93 } else { 94 systemTimer.destroyTimer(timer, (err) => { 95 if (err?.message !== undefined) { 96 Log.error(TAG, 'failed to destroy Timer' + err?.message); 97 } 98 Log.debug(TAG, "a timer has been destroyed,and this Timer id is: " + timer); 99 }) 100 } 101}