2014-04-09 6 views
0

this question과 매우 유사하지만 그 중 두뇌 발가락 순간을 가지고 있으며 을 찾고 있습니다. 좋은 점과 맞음 방법.구조체 포인터 내 참조 구조체 포인터

일부 데이터를 처리하기 위해 새로운 pthread를 시작합니다.이 경우 포인터를 전달할 수 있습니다.이 경우 포인터가 구조체에 대한 스레드에 여러 항목을 전달하기를 원하기 때문입니다.

그 데이터 구조체 자체는 다른 데이터 구조체에 대한 포인터를 포함합니다.

이렇게 설정하면 &에 중첩 된 구조체에 액세스하는 올바른 방법은 무엇입니까?

struct things_struct 
{ 
    int a; 
    int b; 
}; 

struct thread_params 
{ 
    int flag; 
    struct things_struct *things; 
} 

int main() 
{ 
    struct thread_params params; 
    struct things_struct the_things; 

    params.things = &the_things; 

    // Launch thread 
    pthread_create(&thrptr, NULL, PrintThings, (void *)params); 

    //... 

} 

// The thread 
void *PrintThings(void *arg) 
{ 
    struct thread_params *params = (thread_params *)arg; // cast back to correct type 

    int local_a = params->things->a; // is this correct? 

    //... 

} 

다른 비슷한 질문에 대한 참조가 유사 간단한 대답에 비슷한 질문 here 거기 (난 항상 그들에게 게시 후 을 찾기)에 추가합니다.

+0

예. RedX

+0

@RedX - 가능합니다. 실제로 내 질문에 대답 했습니까 아니면 댓글에 대한 이론을 테스트 했습니까? –

답변

2

예 - things_struct에서 멤버 "a"에 액세스하는 올바른 방법입니다.

내 머리 속에서 - 당신은 phtread_create (...)에 param의 주소를 전달해야합니다.

pthread_create(&thrptr, NULL, PrintThings, (void *)&params); 
+0

감사합니다 - 그림을 그렸기 때문에 나머지는 매우 철저히 쓰지 않았습니다. –