//创建一个线程,线程的执行函数是sendproc ,sockparam是传给socket的关于远程主机的参数 hThread = CreateThread(NULL,0,sendproc,(LPVOID)sockparam,0,0); if(hThread==NULL)
{
MessageBox("Creat thread error!",NULL,MB_ICONEXCLAMATION );
return FALSE;
}
//////////////////////////////////
DWORD WINAPI CIfisokDlg::sendproc(LPVOID sockparam)
{ CMysocket mysocket;
LPCTSTR serveraddr;
sparam *pparam;
int a;
pparam = (sparam*)sockparam; mysocket.bysock = pparam; if(!mysocket.Create())
{
AfxMessageBox("Can't create socket");
return FALSE;
}
serveraddr = inet_ntoa((pparam->sockaddr)->sin_addr); a = mysocket.Connect(serveraddr,(pparam->sockaddr)->sin_port);//每次debug到这里就不行了,a=0,但是不debug直接用的时候服务器却显示已经连接。而且不管怎样都无法进入onconnect,如果已经连接应该进入onconnect,请问这是怎么回事,debug与真正用的有什么不同吗?还是我程序出错了 return 1;
}
{
MessageBox("Creat thread error!",NULL,MB_ICONEXCLAMATION );
return FALSE;
}
//////////////////////////////////
DWORD WINAPI CIfisokDlg::sendproc(LPVOID sockparam)
{ CMysocket mysocket;
LPCTSTR serveraddr;
sparam *pparam;
int a;
pparam = (sparam*)sockparam; mysocket.bysock = pparam; if(!mysocket.Create())
{
AfxMessageBox("Can't create socket");
return FALSE;
}
serveraddr = inet_ntoa((pparam->sockaddr)->sin_addr); a = mysocket.Connect(serveraddr,(pparam->sockaddr)->sin_port);//每次debug到这里就不行了,a=0,但是不debug直接用的时候服务器却显示已经连接。而且不管怎样都无法进入onconnect,如果已经连接应该进入onconnect,请问这是怎么回事,debug与真正用的有什么不同吗?还是我程序出错了 return 1;
}
这里的sockparam是不是在栈上的临时变量?如果是的话,那肯定有问题,因为调用CreateThread的函数,可能线程函数还没有执行到Connect,那边栈上的变量就被释放了,应该在堆上new出来,在线程里释放
堆跟栈两者我还没弄清楚,
存在堆上的变量不存在这个问题,程序员要自己分配和销毁,比如new delete malloc free and so on..CMysocket是从CSocket,继承的吗?如果是In CSocket, the OnConnect notification function is never called.
只有CAsyncSocket和CCeSocket才会产生这个消息。
class a();//栈上的,自动释放内存如果你是vc.net上,也分托管堆和非托管堆