在等待NSStream响应时替换呼叫进入睡眠
我做了一个应用程序,它使用NSStream
来建立与telnet服务器的连接。 建立连接时,我发送第一个命令。然后我使用sleep(1);
来让我的应用程序等待。然后发送第二个命令。在等待NSStream响应时替换呼叫进入睡眠
问题是在sleep()
期间整个GUI卡住了。我知道这不是“完美”的方式来做一个“暂停”,我想学习如何正确的。我听到有关NSTimer
的好消息,但是我想用一种具体而“简单”的方式来使用它,以简单地替换我使用不当的sleep()
。
您应该可以使用您用来建立连接的任何程序注册某种回调。只要让你的代码等待这个回调而不做任何事情。
在这种情况下,使用NSStream
,你需要schedule the stream on the run loop:
[stream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
运行循环是处理事件,您的应用程序的结构。当您使用sleep()
时,它会停止,并且您的GUI无法执行任何操作。通过将流作为输入添加到运行循环中,您可以让它们继续工作。
您还必须设置一个代表对象([stream setDelegate:self];
,例如),这将有recieve notifications when该流有东西要报告。该代表必须实施stream:handleEvent:
,将通过引用流和代码来指示发生的事情。
太容易了,我没有想到它!在发送输出流中的下一个命令之前,我可以等待输入流中的“>”字符!通过这种方式,我将拥有“完美”的等待时间!谢谢你的光! :) – Nono
很高兴我能帮到你。 –
你是如何进行连接的? –
通过打开NSStream – Nono
它不仅会使GUI不响应,而且可能(也可能最终会)使您的GUI崩溃。不要在Cocoa的主线程中执行睡眠(对于Cocoa触摸来说是双重的) – user439407