使用 WSAAsyncSelect 的 Winsock 编程模型
前段时间思考了 Windows 下应用程序最合适的实现模型。写了这么一篇 blog 在 Windows 下使用 Timer 驱动游戏 。
我想,Windows 有 Windows 的哲学,Windows 平台下的应用程序,也有他的理念。关于 Windows 编程的书,我比较喜欢 Charles Petzold 的那本:《Windows 程序设计》(还有另一本是《WIndows 核心编程》,在第 5 版的 3.2 节中就提到 Windows 编程的难点在于“别调用我,我会调用您”以及“行动迅速”。
以前,我不十分理解 Windows 为什么把大量的任务放在消息循环中被动的调用,慢慢的我有点理解了。这就是 Windows 。
网络编程我一直是顺着 BSD socket 来学习和使用的,所以 Windows 下写 winsock 程序也一直没有改变习惯。这两天突然对这个做了下反思,按照 Windows 的理念来写 socket 程序应该是怎样的形式?查了下 msdn 后,发现了一个以前被我忽略掉的 api —— WSAAsyncSelect 。
以前粗读 mfc 的源码时,仿佛见过 CSocket 用这个来实现。当时没有太在意;也听不同的几个朋友跟我简单介绍过它,同样没有放在心上。直到今天,自己突然有兴趣了,才仔细研究了一下。