c - 是否订购了带有 IOCP 的 WSASend?
问题描述
我想创建一个 IOCP 应用程序来接收 TCP 数据,一旦收到,我将不得不处理数据并部分写出字节。了解带有 IOCP 的 WSASend 可以完成这项工作。但我担心 WSASend 是否同步到队列和 GetQueuedCompletionStatus 是否同步?例如:-
void processing_from_other_thread(...) {
...
DWORD state = still_doing1;
WSASend( ..,..,.., &state, .. );
DWORD state = still_doing2;
WSASend( ..,..,.., &state, .. );
DWORD state = still_doing3;
WSASend( ..,..,.., &state, .. );
DWORD state = Done;
PostCompletionQueue(....);
}
从上面的上下文来看,GetQueuedCompletionStatus 会让它们有序吗?
GetQueuedCompletionStatus();
return still_doing1
GetQueuedCompletionStatus();
return still_doing2
GetQueuedCompletionStatus();
return still_doing3
GetQueuedCompletionStatus();
return Done
Continue
我只是想确保未来的设计是正确的,恐怕它们是不有序的,例如,return still_doing2在still_doing1之前完成。发送的数据可能会影响到客户端。
解决方案
在 IOCP I/O 模型下,应用程序负责组织传入和传出数据。换句话说,该进程将不同的 I/O 相关消息发布到 IOCP,但不能保证 IOCP 以该确切顺序发送和/或接收数据。
这是异步 I/O 的关键部分。
推荐阅读
- c - 如何在 c 编程中删除在以下结构中具有成员函数的结构?
- binary - 计算机如何添加负数?
- ubuntu-16.04 - 如何设置 aptdcon 以停止在 Ubuntu 16.04 中询问确认?
- c# - 禁用导航属性 ef-core2.2 的命名约定
- python - Selenium 在 Python 中进入无限循环
- node.js - 在 express 节点 js 中获取查询参数
- python - 用于医学成像的 TensorFlow tf.data.Dataset API
- json - 将许多输入输入到一个字符串中 angular 6
- node.js - Mongo DB / Mongoose 条件包含搜索
- java - Java selenium 无法登录 ebay?“哎呀,这不是比赛”