NoteDeep

核心:消息队列

操作系统为每个窗口创建一个消息队列并维护, 想要使用消息队列就要创建一个窗口

第一步
将socket绑定到消息上, 并投递给操作系统
WSAAsyncSelect();
第二步
消息分类处理

只能用于windows

窗口:

Win32

创建窗口结构体
WNDCLASSEX ws;
注册窗口结构体
RegisterClassEx();
创建窗口
CreateWindowEx();
显示窗口
ShowWindow();
更新窗口:(不是必要的)
UpdateWindow();
消息循环
MSG Msg;
GetMessage(&Msg, NULL, ); // 消息结构体, 接收指定窗口的消息(NULL都接收), 接收消息的范围(0, 0 接收所有范围的消息)
TranslateMessage();
DispatchMessage(); // 调用回调函数
回调函数
... ...

优化:

可以处理的socket没有上限, 但是单线程中, 数量越多, 延迟越高, 参考64
开多线程, 一个线程处理64个

问题:

在一次处理过程中, 客户端产生多次send, 服务器只会产生一次recv, 接收所有的数据
(我的程序接收不到连续发送的数据?)

和select的对比:



















评论列表

    核心:消息队列
    窗口:
    优化:
    问题:
    和select的对比: