|
5
|
| JamesSugrue · 技术社区 · 7 年前 |
|
1
6
你的选择真的。如果您认为使用另一个套接字实现会更幸运,那么就这样做。 也许 要想一想,错误并不都在他们的终点。
也许如果你花时间去理解MFC模型,你会得到“啊哈”的时刻,并更好地理解它。我不是Winsock的粉丝——我更习惯于UNIX世界,在这个世界中,同步是一种方式,如果需要异步类型的behavor,您只需运行单独的进程/线程。 我怀疑CAsyncSocket仍然受到MFC是单线程模型(就GUI而言)这一事实的阻碍,尽管Windows已经有相当长一段时间具有真正的先发制人线程。[我可能错了,我已经有一段时间没有直接使用Win32了]。 更新: 根据你的更新,你说你在做什么,我相当肯定你不允许在创建之前连接。引用 http://msdn.microsoft.com/en-us/library/3d46645f(VS.80).aspx 至于原因,我认为这增加了额外的复杂性,因为Windows需要在事件泵送环境中执行异步套接字,因为它们无法阻止主GUI线程。 在UNIXy环境中,要么没有事件线程(正常进程),要么网络操作只是手动分配给另一个线程(在GUI应用程序中)。
进一步更新: 如果在套接字对象上有挂起的操作时关闭和/或删除了该套接字对象,则通常会发生该断言(非异常)。在您的情况下,我建议在您关闭它时,它仍在尝试进行连接。 然后,当连接成功或失败时,将调用回调,并且它无法在表中找到您的套接字。 这不是MFC问题,这是您朋友的代码违反了合同。如果执行连接(或任何异步操作),则必须
从内存中,您可以调用
我已经有很长一段时间没看了,但是你应该能够得到一个CHATSRVR示例程序,它将告诉你如何做。 |
|
|
2
4
问题可能是编写的代码很糟糕,很可能与MFC关系不大或根本没有关系。但是,从您的描述中很难说清楚,“我有一个MFC应用程序,它抛出各种调试断言。我应该怎么做?”。
|