UINT C服務器MFCDlg::recv1(SOCKET a1)
{
while (TRUE)
{
SOCKADDR Client1;
int size = sizeof(SOCKADDR);
char *msg = "123456786456123\r\n";
SOCKET Client = accept(a1, &Client1, &size);
send(Client, msg, strlen(msg) + sizeof(char), NULL);
while (TRUE)
{
recv(Client, (char *)&msg2, MAXBYTE, NULL);
}
}
}
void C服務器MFCDlg::OnBnClickedButton1()
{
HANDLE Thread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)recv1, (LPVOID)a1, 0, 0);
while (1)
{
UpdateData(FALSE);
}
closesocket(a1);
WSACleanup();
}
而且我還需要把從SOCKET獲得的資訊(字串),更新到 MFC 編輯框的 msg1 Cstring 里 ,但是出現了一個進退N難 的 情況
1.如果不把recv1設定為靜態成員函式便無法呼叫 ,但是設定成為了靜態成員函式 呼叫者作為靜態成員函式無法訪問靜態成員變數msg
2.我心里有幾百萬個草泥馬在奔騰!
uj5u.com熱心網友回復:
啟動執行緒,將this指標傳進去不就完了?HANDLE Thread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)recv1, (LPVOID)this, 0, 0);
uj5u.com熱心網友回復:
把物件指標作為執行緒引數傳遞進去,然后通過這個指標呼叫對應的函式uj5u.com熱心網友回復:
還得注意加必要的鎖。uj5u.com熱心網友回復:
前面都已經回復了,把表單物件(this)當作引數傳入到執行緒函式中去。uj5u.com熱心網友回復:
this指標傳進去了,recv1的引數a1怎么進去呢
uj5u.com熱心網友回復:
你可以自定義一個結構體,里面放你需要傳遞給執行緒函式的成員,比如typedef struct _tagPARAMINFO
{
SOCKET sock;
HWND hWnd;
....
}PARAMINFO;
uj5u.com熱心網友回復:
多個執行緒對同一個socket呼叫send是作死的節奏。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/112520.html
標籤:進程/線程/DLL
上一篇:關于VS2013加載ocx控制元件提示自動注冊失敗的問題
下一篇:為什么有些檔案句柄沒有句柄名?
