好吧,我知道这不是论坛,不过没办法,我已经出离郁闷了.T_T
斗胆一问,希望各位大大捧场
问题为:
在一个我写的socket网络程序里面,我用CreateThread函数传参数给处理函数时收不到
程序是一个C/S结构,在Server那边设好监听断口,Client这边有一个按钮,两个个编程框(一个输入,一个显示)点击按钮时把编程框里的文字发送到Server并接收回应消息.单线程的时候表现正常
但我现在想把这边改成多线程:
点击按钮时Client用CreateThread建新线程,创建一个socket负责与Server通信
使用了一个自定义结构体用于线程参数传递
struct SENDPARAM
{
SOCKADDR_IN addrTo;
HWND hWnd;
CString msg;
};
点击按钮时:
//创建发送地址信息
SOCKADDR_IN addrTo;
addrTo.sin_family=AF_INET;
addrTo.sin_port=htons(atoi(strPort));
addrTo.sin_addr.S_un.S_addr=htonl(dwIP);
//用于收发进程的结构体
SENDPARAM* sendParam = new SENDPARAM;
sendParam->addrTo = addrTo;
sendParam->hWnd = m_hWnd;
GetDlgItemText(IDC_EDIT_SEND, sendParam->msg);
HANDLE hThread=::CreateThread(NULL,0,RecProc,(LPVOID)&sendParam,0,NULL);
CloseHandle(hThread);
线程函数RecProc:
//取出结构体信息
SENDPARAM* lpSendStruct = (SENDPARAM*)lpParam;
SOCKADDR_IN addrTo = lpSendStruct->addrTo;
HWND hWnd = lpSendStruct->hWnd;
CString strSend = lpSendStruct->msg;
delete lpSendStruct;//释放内存
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
connect(sock,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
//应该多发送一个字节作为结束符
send(sock, strSend, strSend.GetLength()+1, 0);
在接参数的时候前面两个都正常(
SOCKADDR_IN,HWND),但是接CString的时候就问题了,
不是无效的指针,就是字符对不上号.
我换过许多种方法,但不成功.最开始我想用传进来的主对话框的句柄直接用全局的GetDlgItemText获取IDC_EDIT_SEND这个编辑框的文字,但是一个字都没有.
后面还试过CHAR的数组替换SENDPARAM里的参数,但是传过来问题依旧...@_@
这是不是字符表示上有问题啊?或者是传值/引用方面的问题?
哪位如果知道原因,请麻烦指点一下吧,thx