2010-04-18 27 views
0

我有一個這樣的結構的服務器應用程序: 有一個對象,叫他服務器,在無限循環監聽並接受連接。 我有來自CAsyncSocket的後代類,它已覆蓋事件OnReceive,稱他爲ProxySocket。 另外我有一個線程池與早期創建的線程。CAsyncSocket和ThreadPool問題

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

回答

1

我不認爲你可以在線程池secenario中使用CAsyncSocket對象(或它們的後代)。 CAsyncSockets在WSASsyncSelect之上實現 - 它告訴winsock向窗口句柄發送notifcations。 因爲windows具有線程親和性,所以不能將CAsyncSocket處理「移動」到不同的線程。