2016-12-30 24 views
0

IOがスレッドをどのように管理しているか把握しようとしています。マニュアルでp_thread POSIXとNSThreadの両方を使用することをお勧めしない場合でも、作業。 私は、Threadクラスの "IsExecuting variable"によってAppleが意図するものを理解するために、Threadクラスでテストを試みました。 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"がtrueを出力しますか? AppleはExecutingで何を予定していますか?この時点では、スレッドがプロセッサで実行されているとは考えていません。

この場合はどうしますか?

+1

「NSThread」/「Thread」で 'p_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で管理していません。ほとんどは、pthreadsで実装されたスレッドの上に構築されたキュー(NSOperationQueueとGCD経由)で動作します。 NSThreadであり、はpthreadsの上に構築されていますが、その使用法は一般に推奨されていません。

関連する問題