完成端口API整理

1.
BOOL GetQueuedCompletionStatus(
  HANDLE       CompletionPort,
  LPDWORD      lpNumberOfBytesTransferred,
  PULONG_PTR   lpCompletionKey,
  LPOVERLAPPED *lpOverlapped,
  DWORD        dwMilliseconds
);
  • CompletionPort: 完成端口的句柄,用于与 I/O 操作相关联。

  • lpNumberOfBytesTransferred: 一个指向DWORD的指针,用于接收已完成的I/O操作的字节数。

  • lpCompletionKey: 一个指向ULONG_PTR的指针,用于接收与已完成I/O操作关联的完成键。

  • lpOverlapped: 一个指向 OVERLAPPED 结构的指针,用于接收已完成的I/O操作的信息。

  • dwMilliseconds: 超时时间,以毫秒为单位。如果设置为 INFINITE,则函数将一直等待,直到有I/O操作完成。

2.

DWORD WaitForSingleObject(
  HANDLE hHandle,
  DWORD  dwMilliseconds
);

  

  • hHandle: 要等待的内核对象的句柄。这可以是诸如线程句柄、进程句柄、事件句柄等的内核对象。

  • dwMilliseconds: 最大等待时间,以毫秒为单位。如果设置为 INFINITE,则函数将一直等待,直到内核对象的状态变为 signaled。

函数返回值是等待对象的状态:

  • WAIT_OBJECT_0: 内核对象处于 signaled 状态,等待成功。

  • WAIT_TIMEOUT: 等待时间已过,但内核对象仍处于 nonsignaled 状态。

  • WAIT_ABANDONED: 等待成功,且内核对象是一个互斥对象,之前拥有该对象的线程已经终止。

  • WAIT_FAILED: 函数调用失败,可以通过调用 GetLastError 获取错误代码。

3.

int WSASend(
  SOCKET                             s,
  LPWSABUF                           lpBuffers,
  DWORD                              dwBufferCount,
  LPDWORD                            lpNumberOfBytesSent,
  DWORD                              dwFlags,
  LPWSAOVERLAPPED                    lpOverlapped,
  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
  • s: 指定一个已连接的、正在监听的或正在接受连接的套接字。
  • lpBuffers: 指定一个 WSABUF 结构数组,每个结构指定一个缓冲区及其大小。
  • dwBufferCount: 指定 lpBuffers 数组中的元素个数。
  • lpNumberOfBytesSent: 发送函数返回时,指向已发送的字节数。
  • dwFlags: 提供附加的发送选项。
  • lpOverlapped: 如果是异步操作,指向一个 WSAOVERLAPPED 结构。
  • lpCompletionRoutine: 如果是异步操作,指向完成例程。

4.

int WSARecv(
  SOCKET                             s,
  LPWSABUF                           lpBuffers,
  DWORD                              dwBufferCount,
  LPDWORD                            lpNumberOfBytesRecvd,
  LPDWORD                            lpFlags,
  LPWSAOVERLAPPED                    lpOverlapped,
  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);

  

  • s: 指定一个已连接的、正在监听的或正在接受连接的套接字。
  • lpBuffers: 指定一个 WSABUF 结构数组,每个结构指定一个缓冲区及其大小。
  • dwBufferCount: 指定 lpBuffers 数组中的元素个数。
  • lpNumberOfBytesRecvd: 接收函数返回时,指向接收到的字节数。
  • lpFlags: 提供附加的接收选项。
  • lpOverlapped: 如果是异步操作,指向一个 WSAOVERLAPPED 结构。
  • lpCompletionRoutine: 如果是异步操作,指向完成例程。

posted on 2024-01-16 11:30  对我不好  阅读(3)  评论(0编辑  收藏  举报

导航