2011-12-05 2 views
-2

는 나는 다음과 같은 시나리오, 내가 RefreshViews() 함수의 끝에서 스레드를 실행할메서드가 끝난 후 스레드를 실행 하시겠습니까?

void* Refresh(void *) 
{ 
usleep(10); 
.. 
} 

static void RefreshViews() 
{ ... 
    pthread_t t; 
    pthread_create(&t, NULL, &Refresh, NULL); 
    ... 
} 

있습니다. 제대로 작동하려면 (temp 솔루션), Refresh() 함수에서 실행을 시작할 때 다른 스레드에서 sleep을 추가했습니다.

이 상황을 어떻게 처리 할 수 ​​있습니까? 세 가지 방법이 있습니다

+0

함수를 종료하기 직전에 스레드를 만드시겠습니까? –

+0

그래서 짧은 지연 후에 다른 스레드를 시작 하시겠습니까? – OSH

+0

왜 제대로 작동하지 않습니까? – TheJuice

답변

1

사용할 수 :

  1. 내 의견에 말했듯이, 당신이 기능을 중단하기 바로 전에 스레드를 시작합니다.

  2. RefreshViews을 호출하는 스레드에서 스레드를 생성하십시오.

  3. 은 실제 함수에 대한 프록시 역할을하는 추가 기능을 가지고 있고, 어떤 스레드 생성 : 첫 번째 방법에 대한

    static void RefreshViews() 
    { 
        RealRefreshViews(); 
        pthread_t t; 
        pthread_create(&t, NULL, &Refresh, NULL); 
    } 
    

한 가지는 것은, 당신이 기억해야한다는 것입니다 함수가 끝나기 전에 명시적인 return을 가지고 있다면 스레드를 생성하십시오. 또는 return 대신 스레드 생성으로 이동하려면 goto을 사용하십시오.

0

정적 함수의 outsite 사이트에서 thraed 핸들을 정의하거나 t static을 정의하십시오. 함수의 스레드 핸들은 함수를 떠나는 순간 파괴되고 스택에서 t가 팝됩니다. 스레드를 제어 할 필요가 없거나 (또는 ​​깨끗한 방법으로 제거하는 경우) 스레드를 그대로 두십시오.

관련 문제