如何正确地实现QueryInterface

在Windows编程中,在与系统组件打交道时,我们会经常用到COM接口,对于 QueryInterface() 函数不会感到陌生。相较之下,实现COM接口的需求少得多,一旦需要我们自己来实现COM接口,缺乏经验者很可能会在一些平时不会注意到的问题上碰壁。我最近就在实现 QueryInterface() 的时候遇到了一点麻烦,花了不少时间来排查,最终发现起因原来只是一个低级错误。

C++20协程入门教程

1. 前言

随着Visual Studio 2022的发布,C++20终于来到了我们的眼前,在这个标准的新特性之中,最吸引人之一的是协程,对于饱受异步调用之繁琐写法的人来说,协程似乎是解决异步问题的灵丹妙药。

分析一个驱动程序导致程序无响应的案例

最近有客户投诉我们的程序经常无响应,几乎无法使用。我查看了问题现场,发现有以下表现:

  1. 无响应时程序的CPU使用率基本保持为0%。
  2. 如果一直放着不干预,一分钟左右程序是能恢复正常的。
  3. 从转储文件看,程序是在调用ReadFile读取文件内容时出现无响应的,部分的堆栈如下所示:

如何判断一个类型是否可比较

对于一个用户定义类型,如果定义了operator==或者operator<等比较函数,那么这个类型就是可比较的。在实现一些工具库的时候,可能需要知道某个类型是否可比较,例如,想要知道是否可以使用==操作符来比较两个类对象是否相等,那么可以使用下面的模板类来判断:

Visual Studio并行编译失效的原因

对于大型C++项目来说,并行编译开关/MP是必不可少的编译器选项,它能显著提高项目的编译速度。但是,当我在自己所在的项目中开启了这个选项之后,发现没有什么效果,只有少数文件可以并行编译,大多数文件仍然是串行编译的,编译时CPU使用率只有30%~40%。这个问题困扰了我们项目组很久。