多執行緒程式設計(四)

2021-08-20 18:28:50 字數 1899 閱讀 9405

多執行緒的服務端

//server

#pragma comment(lib, "ws2_32.lib")

#include #include #includeusing namespace std;

//處理服務

unsigned _stdcall do_service(void* p)

; while (1)

if (ret == 0)

if (ret > 0)

memset(buf, 0, sizeof buf); //置0 }

closesocket(conn);

return 0;

}int main(void)

//檢查協議棧的安裝資訊

if (lobyte(wsadata.wversion) != 2 ||

hibyte(wsadata.wversion) != 2)

//或者使用下面的方法

//if (wsadata.wversion != wversionrequested)

// socket listenfd; //建立socket

listenfd = socket(pf_inet, sock_stream, ipproto_tcp); //tcp協議

if (listenfd == invalid_socket) //建立失敗

sockaddr_in servaddr; //伺服器位址

memset(&servaddr, 0, sizeof(servaddr));

servaddr.sin_family = af_inet; //位址族

= htonl(inaddr_any);

servaddr.sin_addr.s_addr = htonl(inaddr_any); //指定ip位址 4位元組主機位元組序轉換為網路位元組序

servaddr.sin_port = htons(8888); //埠號 2位元組主機位元組序轉換為網路位元組序

int ret;

int opt = 1;

ret = setsockopt(listenfd, sol_socket, so_reuseaddr, (char*)&opt, sizeof(opt)); //設定位址重複利用

if (ret == socket_error)

//繫結

ret = bind(listenfd, (sockaddr*)&servaddr, sizeof(servaddr));

if (ret == socket_error)

//監聽

ret = listen(listenfd, somaxconn);

if (ret == socket_error)

socket conn;

sockaddr_in peeraddr;

int peerlen;

while (1)

//將乙個十進位制網路位元組序轉換為點分十進位制ip格式的字串 2位元組網路位元組序轉換為主機位元組序

cout << inet_ntoa(peeraddr.sin_addr) << " " << ntohs(peeraddr.sin_port) << endl;

unsigned threadid;

handle hthread=(handle)_beginthreadex(null, 0, do_service, (void*)conn, 0, &threadid);

if (hthread == null)

closehandle(hthread);

} wsacleanup();

return 0;

}

注意在服務端沒有呼叫waitforsignalobject,否則主線程會阻塞,其他客戶端不能通訊。

c 多執行緒程式設計 四 補充

本文是對c 11 多執行緒程式設計 一 三 的補充 api說明 yield 讓出處理器,重新排程各執行執行緒 get id 返回當前執行緒的執行緒 id sleep for 使當前執行緒暫停指定的時間段 sleep until 使當前執行緒暫停直到指定的時間點 後面三個比較容易理解,比如 std t...

C 多執行緒程式設計之四

例程4 multithread4 該例程測試在windows下最多可建立執行緒的數目。建立乙個基於對話方塊的工程multithread4,在對話方塊idd multithread4 dialog中加入乙個按鈕idc test和乙個編輯框idc count,按鈕標題為 測試 編輯框屬性選中read o...

c c 多執行緒程式設計基礎講解(四)

經過前面的幾個例子,是不是還少個執行緒建立時屬性引數沒有提到,見下文示例 cpp view plain copy include include include include using namespace std define num threads 5 void say hello void ...