好吧,我知道這不是論壇,不過沒辦法,我已經出離郁悶了.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