2016-12-30 39 views
0

我想弄清楚的IO如何管理線程:即使文檔不建議同時使用p_thread POSIX和NSThread(斯威夫特只是線程),我認爲它有助於瞭解他們工作。 我嘗試使用Thread類進行測試,以瞭解Apple通過Thread類的「IsExecuting variable」所打算的內容。在其documentation Apple中聲明,如果接收器正在執行,則此變量返回「true」,否則返回false。 所以我試圖創建一個線程,打印它將進入睡眠,睡眠5秒鐘,醒來,並打印它醒來,並重復週期的時刻。線程和isExecuting可變

這是代碼:

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」打印爲真? 蘋果計劃通過執行來實現什麼?在這一點上,我不相信它打算線程在處理器中運行。

在這種情況下

又有什麼打算?

+1

他們不僅不建議這樣做'p_thread'用'NSThread' /'Thread',與GCD的到來,他們建議你考慮完全放棄自己的線程編程。參見[併發編程指南:從主題客場遷移(https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/ThreadMigration/ThreadMigration.html#//apple_ref/doc/uid/TP40008091- CH105-SW1)。當然,如果你必須使用它,但GCD的生活比'NSThread'更容易。 – Rob

+0

在回答你的問題時,我相信它告訴你線程已經啓動並且沒有終止。 – Rob

回答

1

睡覺仍算在執行中。線程已經啓動並且尚未完成。

注意,iOS版一般不會通過NSThread管理它的線程。它主要適用於隊列(通過NSOperationQueue和GCD),它們構建在使用pthreads實現的線程之上。 NSThread也是構建在pthread之上,但是正如你所說,它的使用一般是不鼓勵的。