程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> windows下的C++ socket服務器(2)

windows下的C++ socket服務器(2)

編輯:C++入門知識

 make_server_socket( port);
 handleAccept( socket_fd);
 main( ac,  * tcp_socket = make_server_socket( (tcp_socket == -
     ( socket_fd == thread(handleAccept, 

1.int make_server_socket(int port) 用於創建服務端的socket的函數,將在後面進行講解。

2.void handleAccept(int socket_fd) 用於處理連接到服務端的客戶端的函數,將在後面進行講解。

3.thread C++11中出現的用於多線程編程,需要#include <thread> ,以前涉及到多線程編程時,在windows中需要使用CreateThread,而在linux中需要用pthread_create函數

而當thread出現後,在代碼層面上,windows和linux就統一了。

thread的構造函數,

template<class _Fn,class... _Args>
explicit thread(_Fn&& _Fx, _Args&&... _Ax)

{

//     

}

簡單來說第一個參數表示函數的名字,其余的參數表示第一個參數所對應函數的參數,模板中的…用到了C++11中的變長模板這一個概念。

比如 t=thread(handleAccept,socket_fd)// handleAccept 函數名字,該函數有一個int的參數,socket_fd對應該int 參數

 

在線程創建完成後,我用t.detach(),將線程與主線程分離開,這樣線程在線程結束時,就會清空自動該線程所占用的棧空間。並且主線程也可以和支線程一起運行,不用等待支線程結束後才能繼續執行。

而如果我們如果使用t.join();會導致主線程必須等待所有當前的支線程結束後才可以往下執行。這樣就無法同時處理不同客戶端的請求了

還有要注意的是thread默認的joinable值是true,這意味著線程是不會析構的,在重復對同一對象創建線程時是會異常終止的,我們需要使用detach()和join(),將joinable的值改為false

 

例如

 a(<< a << main( ac,  *=
=

 

 

大家可以在vs2013中發現

搜狗截圖14年03月04日2230_2

所以SOCKET和int是可以進行轉換的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved