1
0
首先,当其他工作正在进行时,您的主线程可以继续执行的唯一方法是使用另一个线程。一根线不能同时做两件事。 但是,我认为您试图避免的是与线程对象混淆,是的,这可以通过使用beginwrite实现。根据你的问题
调用是在网络驱动程序将数据读取到其缓冲区后进行的。
不,直到它在网络驱动程序处理的缓冲区中。
如果你的意思是它有空间容纳它,那么是的。
不。
不。 编辑 我个人会尝试使用线程。BeginWrite在幕后做了很多事情,你可能应该认识到…另外,我很奇怪,我喜欢控制我的线程。 |
2
2
我会更详细地回答你问题的第三部分。 MSDN文件规定:
据我所知,调用beginsend后是否立即调用回调方法取决于底层实现和平台。例如,如果IO完成端口在Windows上可用,则不会。线程池中的线程将在调用前阻塞。 实际上,networkstream的beginwrite方法只是在.NET实现上调用基础套接字的beginsend方法。Mine使用底层的wsasend winsock函数和完成端口(如果可用)。这使得它比简单地为每个发送/写入操作创建自己的线程要高效得多,即使您要使用线程池也是如此。 然后,socket.beginsend方法调用重叠pedasyncresult.checkAsyncCallOverlappedResult方法(如果wsasend的结果是iopending),后者反过来调用本机 RegisterWaitForSingleObject Win32函数。这将导致线程池中的一个线程阻塞,直到wsasend方法发出它已完成的信号,然后调用回调方法。 networkstream.endsend调用的socket.endsend方法将等待发送操作完成。它必须这样做的原因是,如果IO完成端口不可用,那么将立即调用回调方法。 我必须再次强调,这些细节是特定于我的.NET实现和我的平台的,但希望能给你一些启示。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |