InputStream ios работает без RunLoop - PullRequest
       27

InputStream ios работает без RunLoop

0 голосов
/ 03 октября 2018

Я пишу приложение для iOS, используя InputStream и OutputStream.Тем не менее, я обнаружил, что могу читать и писать из потоков, не планируя их в RunLoop!

Я вот мой ThreadFunc.Обратите внимание, что я закомментировал весь код runLoop, но он все еще работает!

@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...
    }
}

1 Ответ

0 голосов
/ 03 октября 2018

Как отмечается в документации:

Если клиент не опрашивает поток, он отвечает за то, чтобы поток планировался хотя бы в одном цикле выполнения и как минимум в одном из циклов выполненияна котором запланирован запуск потока.

Вы опрашиваете поток.Как правило, это не то, как потоки предназначены для использования, но, поскольку вы, это не требует runloop.

...