並列処理(マルチスレッド)の実装方法
並列処理(マルチスレッド)を実装するには、キューを作成し、そのキューに平行処理させたいメソッドなどを登録することで実現できます。キューの作成
キューの作成です。メインスレッドで処理を実行する"mainQueue"とバックグラウンドで実行する"subQueue"を用意します。
ViewController.h
@interface ViewController ()
{
dispatch_queue_t mainQueue; // メインキュー
dispatch_queue_t subQueue; // サブキュー
}
@end
各キューを定義します。
ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
// メインキュー定義
mainQueue = dispatch_get_main_queue();
// サブキュー定義。
subQueue = dispatch_queue_create("jp.blogspot.obc-fight.myApp.myQueue", 0);
// 今回呼ぶメソッド
[self hoge];
}
dispatch_queue_createメソッドについて。第1引数はキューの名前を付けます。これがどこで使われているかは現在は不明。
第2引数は基本的には"0"または"NULL"を指定しておけばよいそうです。
キューの登録
各キューに処理を登録しますViewController.m
-(void)hoge
{
// サブキュー実行
dispatch_async(subQueue, ^{
[self subQueueMethod];
// メインキュー実行
dispatch_async(mainQueue, ^{
[self mainQueueMethod];
});
});
}
// メインキューで呼ばれるメソッド
-(void)mainQueueMethod
{
NSLog(@"メインキュー実行");
}
// サブキューで呼ばれるメソッド
-(void)subQueueMethod
{
NSLog(@"サブキュー実行");
}
// ログ
サブキュー実行
メインキュー実行
おわり
ディスパッチキューは他にもキューが存在したり処理を遅延させたりと、もっと複雑な処理も書けるようですが、今回ははじめて触ったのでこれくらいで。参考記事
Objective-Cで並列処理を簡単に実装する方法 - YoheiM.NET動画のストリーミング再生と保存を同時に行う - alperithm
Grand Central Dispatch - Nacho4d - programming notes
0 件のコメント:
コメントを投稿