好吧,我知道這不是論壇,不過(guò)沒(méi)辦法,我已經(jīng)出離郁悶了.T_T
斗膽一問(wèn),希望各位大大捧場(chǎng)
問(wèn)題為:
在一個(gè)我寫(xiě)的socket網(wǎng)絡(luò)程序里面,我用CreateThread函數(shù)傳參數(shù)給處理函數(shù)時(shí)收不到
程序是一個(gè)C/S結(jié)構(gòu),在Server那邊設(shè)好監(jiān)聽(tīng)斷口,Client這邊有一個(gè)按鈕,兩個(gè)個(gè)編程框(一個(gè)輸入,一個(gè)顯示)點(diǎn)擊按鈕時(shí)把編程框里的文字發(fā)送到Server并接收回應(yīng)消息.單線程的時(shí)候表現(xiàn)正常
但我現(xiàn)在想把這邊改成多線程:
點(diǎn)擊按鈕時(shí)Client用CreateThread建新線程,創(chuàng)建一個(gè)socket負(fù)責(zé)與Server通信
使用了一個(gè)自定義結(jié)構(gòu)體用于線程參數(shù)傳遞
struct SENDPARAM
{
??? SOCKADDR_IN addrTo;
??? HWND hWnd;
CString msg;
};
點(diǎn)擊按鈕時(shí):
????//創(chuàng)建發(fā)送地址信息
????SOCKADDR_IN?addrTo;
????addrTo.sin_family=AF_INET;
????addrTo.sin_port=htons(atoi(strPort));
????addrTo.sin_addr.S_un.S_addr=htonl(dwIP);
????
????//用于收發(fā)進(jìn)程的結(jié)構(gòu)體
????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);
線程函數(shù)RecProc:
//取出結(jié)構(gòu)體信息?
SENDPARAM*?lpSendStruct?=?(SENDPARAM*)lpParam;
SOCKADDR_IN?addrTo?=?lpSendStruct->addrTo;
HWND?hWnd?=?lpSendStruct->hWnd;
CString?strSend?=?lpSendStruct->msg;
delete?lpSendStruct;//釋放內(nèi)存
????
????
SOCKET?sock?=?socket(AF_INET,?SOCK_STREAM,?0);
connect(sock,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
//應(yīng)該多發(fā)送一個(gè)字節(jié)作為結(jié)束符
send(sock,?strSend,?strSend.GetLength()+1,?0);
在接參數(shù)的時(shí)候前面兩個(gè)都正常(
SOCKADDR_IN,HWND),但是接CString的時(shí)候就問(wèn)題了,
不是無(wú)效的指針,就是字符對(duì)不上號(hào).
我換過(guò)許多種方法,但不成功.最開(kāi)始我想用傳進(jìn)來(lái)的主對(duì)話框的句柄直接用全局的GetDlgItemText獲取IDC_EDIT_SEND這個(gè)編輯框的文字,但是一個(gè)字都沒(méi)有.
后面還試過(guò)CHAR的數(shù)組替換SENDPARAM里的參數(shù),但是傳過(guò)來(lái)問(wèn)題依舊...@_@
這是不是字符表示上有問(wèn)題啊?或者是傳值/引用方面的問(wèn)題?
哪位如果知道原因,請(qǐng)麻煩指點(diǎn)一下吧,thx