base::Bind()
和 base::Callback
可以看作是对标准库 std::bind()
和 std::function
的模拟;因为 chromium 项目早在 C++ 11 正式通过前就已经存在好多年了。
多实例检测非常常规,在程序启动时直接检查用来标记的内核对象是否存在即可,一般都是使用 Mutex
。
麻烦的点在于如何激活第一个实例,显示它的主窗口。
某直播姬一开始的想法是利用 Pipe 建立 IPC 通讯连接,然后后续实例通过发送消息,让主实例 activate 自己的窗口。
虽然之前写直播姬自动更新时实现过续传下载,但是功能规范上并没有太完备;而这篇文章很好的补充了几个断点续传中,严格实现会遇到的几个 key points。
发布分支为 chrome-58 的 google-breakpad 存在无法启用 full minidump 的问题,表现症状是,一旦启用 MiniDumpWithFullMemory
标志,则输出的 dump 文件为 0 字节,但是整个 dump 生成流程没有任何其他异常,相关返回值甚至是 true
。
除了可以使用 ffmpeg 压制视频外,还能利用 ffmpeg 生成某个视频的缩略图。
利用命令行:
1 | ffmpeg.exe -skip_frame nokey -i "some_video.mp4" -vsync 0 -vframes 9 -c:v mjpeg "output_dir\thumb_%d.jpg" |
The Cost of Conditional Moves and Branches
Conditional moves 指令并不一定能提升性能,有时候甚至会导致性能衰减。