Как передать char * argv [] в pthread_create? - PullRequest
1 голос
/ 01 мая 2011

Я пытаюсь передать все аргументы, которые передаются в главный поток, в «вспомогательный поток», который я создаю с помощью «pthread_create».

void *threadMainLoop(void *arg){
    char *arguments = (char*)arg;
    printf("arg 1 - %s\n", arguments[1]);

}

int main(int argc, char *argv[]){
    printf("Start of program execution\n");

    rc = pthread_create(&outboundThread, NULL, threadMainLoop, (void *) argv);
    printf("Thread create rc: %i, %d\n", rc, outboundThread);
    if(rc != 0){
        printf("Thread creation failed\n");
        exit(1);
    }
    pthread_join(outboundThread, NULL);
    return 0;
}

Приведенный выше код не работает, не могли бы вы показать мнекак я могу получить доступ к массиву ARGV, как "argv [0]" и т. д. в потоке?

Ответы [ 2 ]

5 голосов
/ 01 мая 2011

argv в main - это char**, а не char*, и вот к чему вы должны привести его обратно в threadMainLoop.

1 голос
/ 02 мая 2011

Теперь это работает ... спасибо Стиву за толчок в направлении записи .....

void *threadMainLoop(void *arg){
    char **arguments = (char**)arg;   
    printf("args[0] =%s\n", arguments[0]);
    printf("args[1] =%s\n", arguments[1]);
}

int main(int argc, char *argv[]){
    printf("Start of program execution\n");

    rc = pthread_create(&outboundThread, NULL, threadMainLoop, (void *) argv);
    printf("Thread create rc: %i, %d\n", rc, outboundThread);
    if(rc != 0){
        printf("Thread creation failed\n");
        exit(1);
    }
    pthread_join(outboundThread, NULL);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...