一千萬個為什麽

搜索

我有一個這樣的結構的服務器應用程序: 有一個對象,叫做Server,在無限循環中監聽並接受連接。 我有來自CAsyncSocket的後代類,它具有覆蓋事件OnReceive,稱他為ProxySocket。 我還有一個早期創建線程的線程池。

當服務器對象收到連接時,他接受新對象ProxySocket上的新連接。 當數據到達ProxySocket時,他創建一個命令對象並將其提供給線程池。在這個命令對象中,我給出了ProxySocket的套接字句柄。當新的命令對象正在創建時 - 我在工作線程中創建一個新的Socket並附加句柄。 點擊 我的問題是下一個: 當命令結束時,套接字沒有關閉,我只是分離處理它並按計劃將CSocket句柄設置為INVALID_SOCKET值。但是我的第一個ProxySocket對象在此之後沒有接收到新數據接收的消息。我怎麽解決這個問題?

最佳答案

我不認為您可以在線程池方案中使用CAsyncSocket對象(或其後代)。 CAsyncSockets在WSASsyncSelect之上實現 - 它告訴winsock將通知發送到窗口句柄。 因為Windows具有線程親和性,所以永遠不能將CAsyncSocket處理“移動”到不同的線程。

轉載註明原文: CAsyncSocket和ThreadPool問題

猜你喜歡