unsafe_ex
简介
本模块提供一些unsafe操作的扩展功能
注意!unsafe操作是不安全的,通常是为了获取性能优势而有意为之,因此使用者必须自己保证安全性。
组件接口
unsafe_ex.gs
| 函数原型 | 函数作用 |
|---|---|
| mixed async_blocking_call(function func, ...) | 通过pkg.copool执行一个异步阻塞调用 |
| mixed async_blocking_call_with_timeout(mixed timeout, function func, ...) | 通过pkg.copool执行一个异步阻塞调用,带超时 |
类
UnsafeType
unsafe数据类型
目的是为了数据跨域传递时不产生复制,而代价仅仅是在原始数据套上一个readonly的map外壳
对应的safe数据类型请使用domain_value
成员变量
| 变量名 | 类型 | 初始值 | 须初始化 | 描述 |
|---|---|---|---|---|
| value | mixed | nil | 可选 | 原始数据 |
成员方法
| 函数原型 | 函数作用 |
|---|---|
| UnsafeType box(mixed raw_value) | 将原始数据包装成unsafe_type实例 |
| mixed unbox() | 获取原始数据 |
UnsafeFuture
等待处理结果(功能和future.gs相同,但是class map实现,效率更佳)
成员变量
| 变量名 | 类型 | 初始值 | 须初始化 | 描述 |
|---|---|---|---|---|
| result | mixed | nil | 可选 | |
| evt | sync_object | nil | 可选 | |
| co_handle | int | 0 | 可选 |
成员方法
| 函数原型 | 函数作用 |
|---|---|
| mixed wait(mixed wait_time = -1) | 等待异步处理结果 |
| void notify_result(mixed result = nil) | 通知结果 |
| mixed get_result() | 获取结果 |
| void reset() | 重置 |
样例
int raw_value = 1;
UnsafeType box_value = UnsafeType.box(raw_value);
int unbox_value = box_value.unbox();
// 测试正常调用
int result = unsafe_ex.async_blocking_call((int a, int b) {
return a + b;
}, 1, 2);
// 测试不超时
mixed result2 = unsafe_ex.async_blocking_call_with_timeout(1, (int a, int b) {
coroutine.sleep(0.1);
return a + b;
}, 1, 2);
// 测试超时
mixed result3 = unsafe_ex.async_blocking_call_with_timeout(0, (int a, int b) {
coroutine.sleep(0.1);
return a + b;
}, 1, 2);