Thread和isExecuting变量

时间:2016-12-30 22:52:56

标签: ios swift multithreading sleep

我正在试图弄清楚IO如何管理线程:即使文档不建议同时使用p_thread POSIX和NSThread(在swift只是Thread中),我认为了解它们的工作方式也很有帮助。 我尝试使用Thread类进行测试,以了解Apple通过Thread类的“IsExecuting variable”打算做什么。在其documentation Apple声明,如果接收器正在执行,则此变量返回“true,否则返回false”。 所以我尝试创建一个线程,打印它将进入睡眠的那一刻,睡眠5秒钟,醒来,并打印它醒来并重复循环。

这是代码:

    func mythread() {
    repeat{
        print("myThread start to sleep ...")
        Thread.sleep(forTimeInterval: 5)
        print("...myThread wakes up")

    }while(true)
}

和另一个线程,每秒打印mythread的“isExecuting变量” 这是代码:

    func threadmonitor(){
    repeat{
        Thread.sleep(forTimeInterval: 1)
        print("     myThread isExecuting? : \(myThread!.isExecuting)")
    }while (true)
}

印刷品如下:

myThread start to sleep ...
 myThread isExecuting? : true
 myThread isExecuting? : true
 myThread isExecuting? : true
 myThread isExecuting? : true
 ...myThread wakes up
 myThread start to sleep ...
 myThread isExecuting? : true
 myThread isExecuting? : true
 myThread isExecuting? : true
 myThread isExecuting? : true
 myThread isExecuting? : true

为什么,即使线程“MyThread”休眠,它的“isExecuting variable”也会打印出来? Apple执行时打算做什么?在这一点上,我不相信它打算在处理器中运行该线程。

在这种情况下它的意图是什么?

1 个答案:

答案 0 :(得分:1)

睡觉仍然算作执行。该线程已经启动但尚未完成。

请注意,iOS通常不会通过NSThread管理其主题。它主要用于队列(通过NSOperationQueue和GCD),它们构建在使用pthreads实现的线程之上。 NSThread 也是构建于pthreads之上,但正如您所说,它的使用通常是不鼓励的。