我正在试图弄清楚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执行时打算做什么?在这一点上,我不相信它打算在处理器中运行该线程。
在这种情况下它的意图是什么?
答案 0 :(得分:1)
睡觉仍然算作执行。该线程已经启动但尚未完成。
请注意,iOS通常不会通过NSThread
管理其主题。它主要用于队列(通过NSOperationQueue
和GCD),它们构建在使用pthreads实现的线程之上。 NSThread
也是构建于pthreads之上,但正如您所说,它的使用通常是不鼓励的。