0

我在这里问了很多关于 WSAAsyncSelect 和 NET 的问题。几个月前,我什至在赏金上花了 500 个代表并自己回答(我做了一个包装器)。最后我习惯了框架中的 winsock。

今天我问的是非托管语言,不好的一点是我错过了使用套接字做事的框架方式。我正在用 Delphi 编写我的项目,但我理解类 C 语言,所以没问题,我' 甚至不要求任何代码。我喜欢自然的东西,所以请不要建议任何组件,只有纯代码。:)

人们说最好创建另一个隐藏表单并在那里设置消息循环以正确使用 AsyncSelect。

好吧,我的问题很简单:我把我写的整个winsock函数放在那个隐藏的表单里让我的生活更轻松,我还用它的句柄设置了WSaAsyncSelect,消息循环也在那里,但是我写了子类(很多类,巨大的代码),父类是隐藏的形式。

WSAAsyncSelect 是线程安全的吗?这会减慢事情的速度(我在课堂上做了什么)?

我必须在消息循环之外创建线程吗?

任何其他正确使用 AsyncSelect 的技巧将不胜感激。

编辑:为避免任何误解,我直接询问 AsyncSelect()。我从事的项目需要 2 个服务器和 1 个客户端,我认为可以通过该调用很好地处理它们。

4

1 回答 1

1

人们说最好创建另一个隐藏表单并在那里设置消息循环以正确使用 AsyncSelect。

您是直接对 WinSock 进行编码,还是使用 VCL 的 TClientSocket 和 TServerSocket 组件?如果是后者,那么他们已经在内部为您处理 WSAAsyncSelect() (是的,他们确实使用自己的隐藏窗口)。

WSAAsyncSelect 是线程安全的吗?

是的。

这会减慢事情的速度(我在课堂上做了什么)?

您实际上还没有解释这些类在做什么。

我必须在消息循环之外创建线程吗?

不,但如果需要,多个线程可以使用套接字。但是,套接字消息将仅由拥有传递给 WSAAsyncSelect() 的窗口的任何线程处理。

于 2009-07-15T23:52:00.223 回答