CSocket 在线程中的诡异有关问题,高手帮忙

CSocket 在线程中的诡异问题,高手帮忙!
UINT   ProcessSendData(LPVOID   lparam)
{
        CSocket   socket;      
        socket.Create();     /////堆栈错误??   在堆栈中创建也出错。
}
app类已经调用了初始化函数。
直接用API也没有问题,   但send数据后服务器端接收不到,但调试发现send发送字节数正确没有错误。另一个对话框应用程序也没错。
我这个线程在一个非模式对话框中创建,不知道为什么会出错。

在对话框中创建socket后detach再传给线程attach也一样错误。

实在不知道咋回事了。难道在非模式对话框中启动线程不能使用csocket?


------解决方案--------------------
一个线程要调用一次的...既然对话框是属于你的主线程的,那么在对话框初始化的时候肯定不需要AfxSocketInit()了啊~ 呵呵~ :)
------解决方案--------------------
这是因为TLS的关系。在多线程下,建议用Socket API.
------解决方案--------------------
Csocket 是不可以跨线程的。如果非要跨线程需要特殊处理(在你启动线程的时候)。
根本还是把CSoket转换为 Socket API。
------解决方案--------------------
CSocket类不是线程安全的。
------解决方案--------------------
UINT SocketTComit(LPVOID lpParam)
{
//得到socket版本信息。
WORD wVersionRequested;// 定义版本信息变量
WSADATA wsaData;//定义数据信息变量
int err;//定义错误号变量
wVersionRequested = MAKEWORD(1,1);//给版本信息赋值
err = WSAStartup(wVersionRequested, &wsaData);//给错误信息赋值
if(err!=0)
{
::AfxMessageBox( "Socket fail ");
return 0;//告诉用户找不到合适的版本
}
else
{
if(LOBYTE(wsaData.wVersion)!= 1|| HIBYTE(wsaData.wVersion)!=1)
{

::AfxMessageBox( "Socket fail ");
WSACleanup();//告诉用户找不到合适的版本
return 0;
}
else
{

//#define PORT 34000 /// Select any free port you wish
AfxSocketInit(NULL);
CSocket sockSrvr;
sockSrvr.Create(PORT); // Creates our server socket
sockSrvr.Listen(5); // Start listening for the client at PORT

while (1)
{
CSocket sockRecv;
int m= sockSrvr.Accept(sockRecv); // Use another CSocket to accept the connection
if((m> 0) && SendMark)
{
sockRecv.Send(sendstr,48);
SendMark=!SendMark;
}
}
}
}

return 0;
}

在多线程测试通过