2012-04-20 66 views

回答

1

CAsyncSocketEx使用窗口作爲一種廉價的線程來處理該事件的通知是來自於select()方法。不幸的是,如果你沒有消息循環,那麼它創建的窗口將不會收到這些事件。

http://support.microsoft.com/kb/90975

本文介紹了與CreateWindow()的調用需要從具有消息循環的線程調用。如果你不這樣做,那麼通過PostMessage()發送的任何東西都不會到達那裏。

我最近開始鼓搗這個 - 我想刪除令人討厭的隱藏窗口,並用普通的線程取而代之。他們的代碼依靠WSAAsyncSelect()來接收套接字事件...到一個窗口。育!

1

這已經有一段時間了,因爲我有同樣的問題,但如果我沒有記錯的話,要在控制檯應用程序中使用CAsyncSocket,您需要在控制檯應用程序中添加類似DECLARE_CONSOLEAPP(前面的兩個鏈接)。這應該給你的控制檯一個消息泵來生成套接字通知(OnReceive等)。GUI應用程序有這些泵,但控制檯應用程序通常不。下面的第三個(msdn)鏈接也可能適用,它有更多的信息和不同的方式。

如果這些仍然不起作用,你應該在你的套接字代碼中加入斷點,並確保你的套接字沒有在主控制器應用程序(現在有消息泵的那個)的線程或回調中實例化, 。

我覺得'CAsyncSocket WinApp'或'CAsyncSocket控制檯應用'的搜索結果會顯示更多。

http://www.codeguru.com/cpp/misc/misc/consoleapps/article.php/c243/Console-app-using-MFC.htm http://troels.knakkergaard.dk/code.htm

http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/a6f1b72a-21d8-4046-a3dc-d7d29ece2ef6