gpt4 book ai didi

c++ - 将调用线程置于可警告等待状态

转载 作者:行者123 更新时间:2023-11-30 04:25:57 25 4
gpt4 key购买 nike

我的主线程创建了多个 I/O 工作线程。然后我通过执行以下操作从我的主线程启动 I/O 请求:

{
...
IoRequest *pIoRequest = new IoRequest(m_socket);
pIoRequest->SetBuffer(vecCommandData); // vector of BYTEs
pIoRequest->SetOperationType(OP_TYPE_SEND);
WSASend(m_socket, pIoRequest->GetWsaBuffer(), 1, NULL, 0, pIoRequest, NULL);
...
}

在我的一个 I/O 工作线程中的某个时刻,请求完成并且我的 IoRequest 对象的缓冲区填充了有效的响应数据。

DWORD WINAPI WorkerThreadProc(LPVOID lpParameter)
{
IoCompletionPort *pIocp = reinterpret_cast<IoCompletionPort*>(lpParameter);
...
while (true)
{
BOOL bReturn = pIocp->GetStatus(&ulCompletionKey, &dwNumberOfBytesTransferred, (LPOVERLAPPED*)&pIoRequest);
...
switch (pIoRequest->GetOperationType())
{
...
case OP_TYPE_RECEIVE_DATA:
{
...
// the requested I/O operation has completed and pIoRequest's buffer now contains valid response data!
break;
}
...
}
}

return 0;
}

如何在调用 WSASend() 后将我的主线程置于可警告等待状态,并使其在准备就绪时接收响应数据?

最佳答案

在 IOCP 服务器中,它通常是 GetQueuedCompletionStatus()。

关于c++ - 将调用线程置于可警告等待状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11827706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com