別のバックグラウンド スレッドが完了するまでバックグラウンド スレッドが機能しないようにする方法と、最初のバックグラウンド スレッドが完了するとそのスレッドを開始するようにする方法
質問する
2126 次
2 に答える
2
私のコメントで述べたように、GCDのシリアルディスパッチキューを使用できます。デモ用のサンプルコードは次のとおりです。
- (IBAction)buttonSerialQ2Pressed:(id)sender
{
dispatch_queue_t serialdQueue;
serialdQueue = dispatch_queue_create("com.mydomain.testbed.serialQ2", NULL);
dispatch_async(serialdQueue, ^{
//your code here
[self method1];
});
dispatch_async(serialdQueue, ^{
//your code here
[self method2];
});
dispatch_async(serialdQueue, ^{
//your code here
[self method2];
});
dispatch_async(serialdQueue, ^{
//your code here
[self method3];
});
}
-(void)method1
{
for (int i=0; i<1000; i++)
{
NSLog(@"method1 i: %i", i);
}
}
-(void)method2
{
for (int i=0; i<10; i++)
{
NSLog(@"method2 i: %i", i);
}
}
-(void)method3
{
for (int i=0; i<100; i++)
{
NSLog(@"method3 i: %i", i);
}
}
于 2012-06-04T13:51:31.173 に答える
2
以下に示すようなタイプのイベントを処理するには、フラグを使用します。
BOOL isYourthreadexecuting = NO;
- (void)beginThread {
isYourthreadexecuting = YES;
[self performSelectorInBackground:@selector(backgroundThread) withObject:nil];
}
- (void)backgroundThread {
[myClass performLongTask];
// Done!
isYourthreadexecuting = NO;
}
- (void)waitForThread {
if (! isYourthreadexecuting) {
// Thread completed
[self callyourmethod];
}
}
編集済み>>使用コメントに応じた追加
マルチスレッドにはNSOperationQueueを使用することをお勧めします。
願わくば、これはあなたになります...
于 2012-05-05T10:48:20.947 に答える