CWinThread* SocketThread; //子對話框的private變數
我的邏輯是這樣:
打開子對話框的時候,呼叫AfxBeginThread(&(Optimizer::server_thd), 0); 創建監聽執行緒。
SocketThread = AfxBeginThread(&(Optimizer::server_thd), 0); //執行緒開始
我用火絨的網路分析,可以看到已經開始監聽對應的埠。
server_thd是一個類中的static函式,里面用到的socket 和 listen_sock 都是靜態變數。
主要系結和監聽如下:
::bind(listen_sock,(struct sockaddr*)&local_addr, sizeof(SOCKADDR_IN))
sock = accept(listen_sock, (struct sockaddr*)&client_addr, &iaddrSize)
關閉子對話框時,我想結束監聽。我分別呼叫了
shutdown(sock, SD_BOTH);
closesocket(sock);
shutdown(listen_sock, SD_BOTH);
closesocket(listen_sock);
TerminateThread(SocketThread->m_hThread, 0);
但是從火絨中查看,還是在監聽埠,直到把整個軟體關閉才停止監聽,請問如何停止監聽呢?
uj5u.com熱心網友回復:
1 關閉前設定個斷點 ,除錯運行看看 是否是按想要的邏輯順序執行的2 執行緒不建議 強制中斷,容易資源泄露啥的, 建議使用標志 等待事件等方式
3 Socket 關閉后,系統為保證后面的操作不立即使用到此連接而會有一個等待保持時間,留意下
uj5u.com熱心網友回復:
設定斷點了,是按邏輯執行的,而且執行緒數確實少了1
等待了很久,還是有監聽
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/250931.html
標籤:網絡編程
下一篇:問個菜鳥級的問題
