티스토리 뷰

IOS

IOS 스레드 제어

Vincent.seo 2018. 8. 28. 14:37

IOS 에서 스레드를 사용 하기 위해서 병렬 혹은 직렬 큐를 생성하여 사용 할 수 있다.

디스패치-그룹을 사용 하는 방법

1. 병렬큐 생성

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);


2. 직렬큐 생성

dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr);


macOS 10.7 이후버전과 IOS 4.3에서는 attr를 반드시 명시적으로 DISPATCH_QUEUE_SERIAL혹은 (NULL)로 명시 하여야 한다. 만약 비동기 큐를 만들려면 DISPATCH_QUEUE_CONCURRENT으로 입력 해야 한다. 그 이전 버전에서는 NULL이라고 명시하면 된다.

아래는 큐를 생성해여 디스패치 그룹을 이용하여 스레드를 사용하는 예제 코드이다.

- (void)thead1 { // 대스패츠 그룹을 사용하여 스레드 태스크 실행시 메인 스레드가 멈취져 있는것을 방지. dispatch_group_t group = dispatch_group_create(); // 스레드 태스크 생성1: 병렬 큐 생성 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 스레드 태스크 생성2: 직렬 큐 생성 // dispatch_queue_create("jp.hateblo.shin.LABEL_NAME", NULL) dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"Done: %d", 1); }); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"Done: %d", 2); }); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"Done: %d", 3); });


dispatch_group_notify(group, queue, ^{ NSLog(@"All tasks are done!");\ }); NSLog(@"waiting..."); // group에 할당된 세개의 작업 큐가 끝날때까지 기다린다. dispatch_group_wait(group, DISPATCH_TIME_FOREVER); // do somthing after thread finished. [NSThread sleepForTimeInterval:1]; }


세마포어를 사용 하는 방법

- (void)thread2 {
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //열쇠갯수
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:2]; // do something
        NSLog(@"Finish!");
        dispatch_semaphore_signal(semaphore); //열쇠갯수 늘림
    });
        
    [NSThread sleepForTimeInterval:1]; // do something
    NSLog(@"waiting...");
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); //열쇠반환될때 까지 기다림
}


'IOS' 카테고리의 다른 글

레이아웃 - 스크롤뷰의 컨텐츠 추가 삭제 하기  (0) 2018.08.28
PDF 파일 생성 및 저장(UIView를 이용)  (1) 2018.03.29
Property  (0) 2018.03.14
클래스 오브젝트 초기화  (0) 2017.03.29
@Property, @Synthesize, @Dynamic  (0) 2017.03.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함