2012-04-20 12 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