首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InputStream ios不需要RunLoop即可工作

InputStream ios不需要RunLoop即可工作
EN

Stack Overflow用户
提问于 2018-10-03 19:09:42
回答 1查看 267关注 0票数 0

我正在用iOS和OutputStream编写一个应用程序。但是,我发现我可以从流中读取和写入,而无需在RunLoop中调度它们!

我在这里是我的ThreadFunc。注意,我已经注释掉了所有的runLoop代码,但是它仍然有效!

代码语言:javascript
复制
@objc func threadFunc(){
    var dataToSend: Data?;

    print("Inside threadFunc loop!");

    //self.m_ReadStream?.schedule(in: RunLoop.current, forMode: RunLoopMode.commonModes );
    self.m_ReadStream!.open();

    //self.m_WriteStream?.schedule(in: RunLoop.current, forMode: RunLoopMode.commonModes );
    self.m_WriteStream!.open()

    var once = false;

    while( !m_Calcelled ){
        let wStat = self.m_WriteStream?.streamStatus;
        let rStat = self.m_ReadStream?.streamStatus;

        if( dataToSend == nil && self.m_Lock.lock(before: Date(timeIntervalSinceNow: 10 ) )){
            dataToSend = self.m_DataToSend; // Make local copy
            self.m_DataToSend = nil;
            self.m_Lock.unlock();
        }

        if( dataToSend != nil && wStat == .open ){
            let totalBytesSent = self.sendDataBlock( d:dataToSend! );
            if( totalBytesSent == dataToSend?.count ){
                print("successfully sent the packet.");
            }
        }
        //let untilDate: Date = Date(timeIntervalSinceNow: 5 );
        //print("SocketThread. Calling runLoop...");
        //RunLoop.current.run( mode: .defaultRunLoopMode, before: untilDate );
        //print("SocketThread is waiting for action....");
        //sleep(1);   // Sleep for 1 second...
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 20:19:00

正如医生们所指出的:

除非客户端轮询流,否则它负责确保在至少一个运行循环上调度该流,并确保正在运行该流所调度的至少一个运行循环。

你在轮询溪流。通常情况下,流的使用方式并不是这样,但是由于您使用了流,所以它不需要运行循环。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52634122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档