喵个咪的博客喵个咪的博客
喵个咪的技术与生活
文章列表
文章分类
文章标签
时间线
喵个咪的技术与生活
文章列表
文章分类
文章标签
时间线
健康养生 1fastapi 1随笔日志 1产品设计 1ASIO 2cron 1rclone 1flutter 1RxDart 1Make 2CMake 2Ninja 1设计模式 2Cache Aside Pattern 1缓存设计模式 1汽车 1go 2CDC 1PostgreSQL 6Centos 1docker 1CLion 1云手机 1GoogleTest 1Cococs2dx 1Cocos Creator 1代码注释 1IDE 3Python 4TRC20 1C++ 8类型转换 1CQRS 1Kafka Streams 1Bazel 2Docker 21Go 6crontab 1客户留存率 1EFK 1RustDesk 1Jitsi Meet 1Traefik 1Swagger 1Docker Hub 1VIM 1Word 1VBA 1Doris 1量化交易 2Flutter 13Widget 1Ent 2SQL 2Excel 2配色 1TypeScript 3C# 1Sealed Class 2微信小程序 1人脸识别 2RK3588S 1Android Studio 1iOS 1GetX 1鸿蒙 1字体渲染 1期货 1Futures 1地理围栏 1GEO 1Git 2Golang 99Go-Kratos 86GoWind 41UBA 1算法 5WebRTC 2MongoDB 1Headless CMS 1WASM 1随机种子 1MacOS 3Ubuntu 2GCC 1Godot 1Clang 1Superset 1CentOS 1OpenCV 1咖啡 1Android 1Google Play 1Unity WebGL 1Dexie 1IndexedDB 1htop 1IM 1Postgresql 1Mattermost 1Qt 4TL;DR 1Swift 1Javascript 2JetBrains 1Typescript 1libuv 1Linux 1本地化 1国际化 1状态同步 1帧同步 1泡泡水 1Markdown 1机器学习 1QTT 1MQTT 2MSB 1LSB 1npm 1pnpm 1yarn 1OCR 1OHLC 1OLTP 1OLAP 1OpenAI 1OpenAPI 1数织 1Ping 1人体姿态识别 1全文搜索 1交叉表 1Prometheus 1Protobuf 2Docx 1QUIC 1Reactor 1Redis 1REST 1CoTURN 2RBAC 1Selenium 1基准测试 1Spine 1股票 1Roguelike 2ThingsBoard 3时间戳 1时序数据库 3交易所 1Unity 2用户画像 1PgBouncer 1Vite 1Vue 1WebGL 1加权随机 1BI 1数据血缘 1Roguelite 1Protocol 1WiFi 1WSL 3Windows 4
ASIO 定时器完全指南:类型解析、API 用法与实战示例

Date: 1/1/2020Category: C++编程Tag: ASIO

ASIO(Boost.Asio 或独立的 Asio)作为高性能异步 IO 库,提供了灵活且高效的定时器组件,适用于网络编程、异步任务调度、定时触发等场景。本文将系统梳理 ASIO 定时器的核心类型、底层实现、核心 API、实战示例及常见问题,帮助开发者快速掌握其使用方法。

一、ASIO 定时器核心类型解析

ASIO 提供 4 种常用定时器,均基于底层模板类实现,核心差异在于 时钟类型(决定精度、是否受系统时间影响)和 适用场景。先纠正一个常见误区:high_resolution_timer 并非 system_timer,二者是 basic_waitable_timer 的不同时钟特例化,属于并列关系。

ASIO的post和dispatch方法

Date: 1/1/2020Category: C++编程Tag: ASIO

关于这两个方法,我去网上找了一大堆资料,都没有讲清楚是怎么一回事。还是读了ASIO的源代码这才理解。

要提到这两个方法,不得不提一下Windows的两个API:SendMessage和PostMessage。

io_context::post跟PostMessage的行为差不多,投递完消息立即返回,Handler的执行跟它没有半毛钱的关系。

io_context::dispatch可以认为是SendMessage的超集,SendMessage是阻塞的,必须要在消息处理完成之后才返回,当io_context::dispatch在io_context的工作线程中被调用的时候,io_context::dispatch的行为和SendMessage是一致的,必须要在Handler调用完成之后才返回。但是,如果不是io_context的工作线程中调用,则执行了io_context::post一样的行为:将Handler投递到io_context的事件队列中去。