//公有变量
CSocket ServerSocket;
CSocket ClientSocket;
//主程序
{
ServerSocket.Create(m_Port);//创建监听端口
ServerSocket.Listen(-1);
while(true)
{
ServerSocket.Accept(ClientSocket);
clientCount+=1;
SOCKET hSocket=NULL;
ClientSocket.FromHandle(hSocket); //获得句柄
if(ClientSocket !=NULL && clientCount<=Maxnum)//连接用户未超过限制
{
AfxBeginThread(Listened,(LPVOID)hSocket,THREAD_PRIORITY_NORMAL); //启动线程
}
else
{
....
}
}
线程:
UINT Listened (LPVOID pParam)
{
CSocket mysocket;
.......
return 0;
}我想把ClientSocket作为参数传递到线程里
或者使线程里的mysocket=ClientSocket应该怎么办??
CSocket ServerSocket;
CSocket ClientSocket;
//主程序
{
ServerSocket.Create(m_Port);//创建监听端口
ServerSocket.Listen(-1);
while(true)
{
ServerSocket.Accept(ClientSocket);
clientCount+=1;
SOCKET hSocket=NULL;
ClientSocket.FromHandle(hSocket); //获得句柄
if(ClientSocket !=NULL && clientCount<=Maxnum)//连接用户未超过限制
{
AfxBeginThread(Listened,(LPVOID)hSocket,THREAD_PRIORITY_NORMAL); //启动线程
}
else
{
....
}
}
线程:
UINT Listened (LPVOID pParam)
{
CSocket mysocket;
.......
return 0;
}我想把ClientSocket作为参数传递到线程里
或者使线程里的mysocket=ClientSocket应该怎么办??
线程:
UINT Listened (LPVOID pParam)
{
CSocket mysocket = (CSocket)pParam;
.......
return 0;
}
error C2440: 'type cast' : cannot convert from 'class CSocket' to 'void *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
clientCount+=1;
AfxMessageBox(sInfo);
HANDLE hSendThread = NULL;
SOCKET hSocket;
hSocket=ClientSocket.Detach();
if(ClientSocket !=NULL && clientCount<=Maxnum)
{
if(hSendThread=AfxBeginThread(Listened,(LPVOID)hSocket))
{
CloseHandle (hSendThread);
}
}
else
{
}
ClientSocket.Close();
}
UINT Listened (LPVOID pParam)
{
SOCKET sock =(SOCKET)pParam;
CSocket sockRecv;
sockRecv.Attach(sock);
.......
return 0;
}
可以传递句柄,然后使用CSocket::FromHandle(不知道是不是也可以用CSocket::Attach)使用api是一个不错的选择,因为CSocket本身的实现是不很理想的,它是在CAsyncSocket
的基础上实现的一个阻塞模式,好像是针对早期的16位windows开发的我想,如果对性能要求不高,可以使用CAsyncSocket,否则,就用socket api,
包括重叠I/O等,也可以使用一些库,如ace
AfxBeginThread(Listened,(LPVOID)ClientSocket,THREAD_PRIORITY_NORMAL); //启动线程
线程:
UINT Listened (LPVOID pParam)
{
CSocket mysocket = (CSocket)pParam;
.......
return 0;
}
方法二:
你还可以通过定义一个全局变量,然后用临界点方法,实现参数传递!