• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NativeVsync开发指导 (C/C++)
2
3## 场景介绍
4
5NativeVsync模块用来获取系统VSync信号,提供了OH_NativeVSync实例的创建、销毁以及设置VSync回调函数的能力,VSync信号到来时会调用已设置的VSync回调函数。
6
7## 接口说明
8
9| 接口名 | 描述 |
10| -------- | -------- |
11| OH_NativeVSync_Create (const char \*name, unsigned int length) | 创建一个OH_NativeVSync实例,每次调用都会产生一个新的实例。 |
12| OH_NativeVSync_Destroy (OH_NativeVSync \*nativeVsync) | 销毁OH_NativeVSync实例。 |
13| OH_NativeVSync_FrameCallback (long long timestamp, void \*data) | 回调函数的形式,timestamp表示时间戳,data为回调函数入参。 |
14| OH_NativeVSync_RequestFrame (OH_NativeVSync \*nativeVsync, OH_NativeVSync_FrameCallback callback, void \*data) | 请求下一次VSync信号,当信号到来时,调用回调函数callback。 |
15
16详细的接口说明请参考[native_vsync](../reference/apis-arkgraphics2d/_native_vsync.md)。
17
18## 开发步骤
19
20以下步骤描述了如何使用`NativeVsync`提供的Native API接口,创建和销毁`OH_NativeVsync`实例,以及如何设置VSync回调函数。
21
22**添加动态链接库**
23
24CMakeLists.txt中添加以下lib。
25```txt
26libnative_vsync.so
27```
28
29**头文件**
30```c++
31#include <native_vsync/native_vsync.h>
32```
33
341. **首先需要准备一个VSync回调函数**
35    ```c++
36    #include <iostream>
37
38    static bool flag = false;
39    static void OnVSync(long long timestamp, void* data)
40    {
41        flag = true;
42        std::cout << "OnVSync: " << timestamp << std::endl;
43    }
44    OH_NativeVSync_FrameCallback callback = OnVSync; // 回调函数必须是OH_NativeVSync_FrameCallback类型
45     ```
462. **创建OH_NativeVsync实例**。
47    ```c++
48    char name[] = "hello_vsync";
49    OH_NativeVSync* nativeVSync = OH_NativeVSync_Create(name, strlen(name));
50     ```
51
523. **通过OH_NativeVsync实例设置VSync回调函数**。
53    ```c++
54    #include <unistd.h>
55    #include <iostream>
56
57    OH_NativeVSync_RequestFrame(nativeVSync, callback, nullptr);
58    while (!flag) { // 判断flag值,上面的VSync回调函数被执行后才会跳出while循环,表示已经接收到VSync信号
59        std::cout << "wait for vsync!\n";
60        sleep(1);
61    }
62    std::cout << "vsync come, end this thread\n";
63    ```
64
654. **销毁OH_NativeVsync实例**。
66    ```c++
67    OH_NativeVSync_Destroy(nativeVSync); // 如不需要接收VSync信号,请及时销毁OH_NativeVsync实例
68    ```