2017 小结

上一次写年终总结大概在三四年前,因为老博客数据没有备份的缘故,具体是什么时候也记不清了。

BTW,其实我也不是很记得一开始为什么要在春节期间而不是元旦时写上一年的总结。可能和往常元旦时还未放假有关。

17年总体上还算符合个人发展的预期:

上半年接了原来主站投稿工具的锅,和另外一个同事花了一个月多,完全从头开始硬生生的做了一个新版本的投稿工具,还带着新版本要求的压制功能。后续又迭代了两三个版本,后面最新的 v2.0 甚至都已经开始支持简单的视频编辑。

Read More

使用 Winsock Extension API 的正确姿势

所谓的 Winsock Extension API 指的是微软专门额外添加,由应用层 mswsock.dll 导出的函数集,包括 AcceptEx(), DisconnectEx() .etc

使用这部分 API 的原因是它们通常支持更新更牛X的特性,且几乎大多数都是异步函数。

Read More

在 Windows 上获取崩溃的模块名和模块内地址偏移

如果应用程序存在多个模块,那么有很大的可能通过 SetUnhandledException() 安装的崩溃处理函数和发生崩溃的地址不在一个模块内,因此直接在 crash handler 里使用当前模块地址是错误的做法。

一个可行的方法是,利用崩溃时的上下文信息 EXCEPTION_POINTERS,拿到触发崩溃的地址 EIP/RIP,然后利用 Windows 7 新增的 GetMappedFileNameW() 拿到某个地址所在的模块的完整设备路径。

Read More

Monthly Read Posts in Jan 2018

C++17 constexpr everything (or as much as the compiler can)

Read More

正确地初始化 std::atomic_flag

根据标准文档的要求,std::atomic_flag 只有利用 ATOMIC_FLAG_INIT 初始化之后,才获得一个确定的初始状态。

现在假设我们要自己实现一个 spin-lock,那么只需要利用 std::atomic_flag 实现一个 spin-mutex:

Read More

Binding to Privately Inherited Member Functions

考虑代码

#include <functional>

Read More

Monthly Read Posts in Dec 2017

C++ 11 Concurrency: Part 1 & Part 2 & Part 3

Read More