4

このようなスレッドを使用しています。

[NSThread detachNewThreadSelector:@selector(myfunction) toTarget:self withObject

スレッドは正しく実行されています。途中でスレッドを終了したいのですが、どうすればよいですか。[NSThread exit] を使用すると、アプリケーションがハングします。

4

2 に答える 2

4

どのスレッドで「[NSThreadexit]」を実行していますか?[NSThread exit]は現在のスレッドで実行されるため、 myfunctionセレクターの一部としてこれを呼び出す必要があります。メインスレッドで呼び出すと、メインスレッドを終了するだけです。

また、このようなスレッドを停止すると、終了するスレッドがリソースをクリーンアップできなくなるため、お勧めできません。

myfunctionは、調整スレッドとの共有変数に基づいて終了する必要があります。

- (void) myFunction
{
    while([someObject stillWorkToBeDone]) 
    { 
      performBitsOfWork();
    }
}

「withObject」を使用して、調整スレッドとワーカースレッドの間で参照を共有できます。このようにして、調整スレッドは共有オブジェクトのインスタンス変数を変更して、ワーカースレッドがこの条件に基づいて作業を停止できるようにすることができます。

ワーカースレッドを終了するには、調整スレッドは次のようにsmthを呼び出します。

[someObject setStillWorkToBeDone:false];
于 2009-05-26T07:30:58.223 に答える
4

あなたは電話するべきです

-[NSThread cancel]

作成したスレッドで、

-[NSThread isCancelled]

あなたのwhileループで。

于 2012-07-26T11:20:25.527 に答える