add WallTime và WallTimer

This commit is contained in:
2026-01-13 14:29:16 +07:00
parent 35b77e9fa2
commit 750dc94c61
12 changed files with 3225 additions and 1 deletions

View File

@@ -98,7 +98,70 @@ Rate tự động tính toán thời gian còn lại trong mỗi chu kỳ và sl
- Có thể quản lý nhiều timer đồng thời
- Cung cấp thông tin chi tiết về timing để debug và monitoring
### 5. WallRate - Rate dùng thời gian thực
### 5. WallTime - Thời gian thực (Wall-clock Time)
`WallTime` đại diện cho thời gian thực từ hệ thống, luôn sử dụng wall-clock time và không bị ảnh hưởng bởi simulated time.
**Đặc điểm:**
- Luôn sử dụng thời gian thực từ system clock
- Không cần khởi tạo (`Time::init()`)
- Không bao giờ throw exception
- Không bị ảnh hưởng bởi simulated time
- Thread-safe và cross-platform
**Khác biệt với Time:**
- `Time` có thể sử dụng simulated time (hữu ích cho testing)
- `WallTime` luôn dùng thời gian thực, không phụ thuộc vào simulated time
- `Time` cần khởi tạo, `WallTime` không cần
**Ứng dụng:**
- Đo thời gian thực thi (profiling/benchmarking)
- Timeout và thời gian chờ thực tế
- Logging với timestamp thực
- Giao tiếp với hardware cần timing chính xác
- Performance monitoring
### 6. WallTimer - Hẹn giờ định kỳ với thời gian thực
`WallTimer` tương tự như `Timer` nhưng sử dụng wall-clock time thay vì simulated time. Đây là công cụ mạnh mẽ cho các tác vụ cần timing chính xác trong thời gian thực.
**Đặc điểm:**
- Chạy trong thread riêng, không chặn thread chính
- Luôn sử dụng wall-clock time (không bị ảnh hưởng bởi simulated time)
- Có thể là one-shot (chỉ chạy một lần) hoặc repeating (lặp lại)
- Callback nhận thông tin chi tiết về timing (WallTimerEvent)
- Có thể start/stop và điều chỉnh period động
- Tự động cleanup khi hủy
**Khác biệt với Timer:**
- `Timer` sử dụng `Time`/`Duration` (có thể bị ảnh hưởng bởi simulated time)
- `WallTimer` sử dụng `WallTime`/`WallDuration` (luôn dùng thời gian thực)
- `Timer` phù hợp cho ROS messages và simulation
- `WallTimer` phù hợp cho performance monitoring, hardware interfaces, và real-time operations
**WallTimerEvent chứa thông tin:**
- Thời gian thực tế khi callback được gọi (wall-clock time)
- Thời gian mong đợi khi callback được gọi (wall-clock time)
- Thời gian của callback trước đó (wall-clock time)
- Khoảng thời gian giữa các callback (để phát hiện drift)
**Ứng dụng:**
- Performance monitoring và profiling
- Real-time deadlines và timeouts
- Hardware interfaces cần timing chính xác
- Benchmarking và measurement
- Background tasks cần chạy theo thời gian thực
**Ví dụ:**
```cpp
// Đo thời gian thực thi
robot::WallTime start = robot::WallTime::now();
doSomething();
robot::WallDuration elapsed = robot::WallTime::now() - start;
std::cout << "Took " << elapsed.toSec() << " seconds" << std::endl;
```
### 6. WallRate - Rate dùng thời gian thực
`WallRate` tương tự như `Rate` nhưng luôn sử dụng thời gian thực (wall-clock time) thay vì simulated time.
@@ -218,6 +281,7 @@ Sử dụng simulated time để chạy các test cases với timing cụ thể,
## Tài liệu tham khảo
- `WALLTIME_USAGE.md` - Hướng dẫn chi tiết về WallTime với các ví dụ và use cases
- `TIMER_USAGE.md` - Hướng dẫn chi tiết về cách sử dụng Timer với các ví dụ
- `TIMER_EVENT_EXPLANATION.md` - Giải thích chi tiết về TimerEvent structure và các trường dữ liệu
- `CHANGELOG.rst` - Lịch sử thay đổi và version history