真心求解重叠模式(客户端)中的回调函数(此回调函数是虚函数)的问题?我想问问回调函数和虚函数有关系没啊
下面的 RecvCallBackFun  注释里说他是回调函数,实际是吗?
实际调用的是神马啊另外,如果是一个客户端连接多服务器,下面的WSARecv 能辨别收到的是来自哪个服务器的消息吗class COverlappedBase
{
public:
COverlappedBase();
~COverlappedBase(); virtual void RecvCallBackFun(UINT8 *data,UINT32 ulLen){};
virtual void RecvCallBackFun(LPPER_IO_OPERATION_DATA lpPerIOData){};
....
}struct PER_IO_OPERATION_DATA_ : public WSAOVERLAPPED
{
WSABUF         Buffer;
char           szMessage[MAXRECVLEN];
DWORD          NumberOfBytesRecvd;
DWORD          Flags;
SOCKET         sClient;
DWORD    NumberRecvd;
COverlappedBase *pCommObject;
};void CALLBACK RecvCompletionRoutine(DWORD dwError,DWORD cbTransferred,
LPWSAOVERLAPPED lpOverlapped,DWORD dwFlags)
{
LPPER_IO_OPERATION_DATA lpPerIOData = (LPPER_IO_OPERATION_DATA)lpOverlapped; //将数据丢入缓冲区
//调用各UE的回调函数
lpPerIOData->NumberRecvd = cbTransferred;
lpPerIOData->pCommObject->RecvCallBackFun(lpPerIOData); //重新投递接收请求
memset(lpPerIOData,0,sizeof(WSAOVERLAPPED));
//Sleep(60);
if(WSARecv(lpPerIOData->sClient,
&lpPerIOData->Buffer,
1,
&lpPerIOData->NumberOfBytesRecvd,
&lpPerIOData->Flags,
&static_cast<OVERLAPPED&>(*lpPerIOData),
RecvCompletionRoutine))
{
if(WSA_IO_PENDING != WSAGetLastError())
{
PRINT_LOG("CSocketManage","WorkerThread","WSARecv failed!: %ld, Line:%ld", WSAGetLastError(), __LINE__);
}
}
}