• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}