Поток родителя и сына для печати текста на языке C - PullRequest
0 голосов
/ 03 октября 2018

Я написал программу, в которой я создаю поток в main, у которого есть сын, который вызывает maFunction для показа текстового сообщения.Проблема в том, что когда я выполняю это, это не работает, и я не понимаю, почему.Любая идея приветствуется.Большое спасибо.

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
void * maFonction (void * val) {
    char * chaine = (char *) val;
    printf ("text received: %s\n", chaine);
}

int main(void) {
    pthread_t leThread;
    int ret = pthread_create (&leThread, NULL, maFonction, "First program with Pthreads");
    if (ret != 0) {
        perror ("pthread_create");
        exit(EXIT_FAILURE) ;
    }
} 

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Проблема в том, что ваша функция main немедленно возвращается.Когда это возвращается, стандартная библиотека C тогда вызывает выход процесса.Выход из процесса убивает как основной поток, так и любые другие потоки.Следовательно, ваш подпоток никогда не получит шанса на запуск до того, как основной поток его эффективно уничтожит.

Добавьте sleep(1) непосредственно перед закрывающей фигурной скобкой в ​​main, чтобы немного задержать выход из процесса, и вы увидите printf огонь вашей подсети.

+ 1 к@ Nick-s 'ответ: нужно набрать pthread_join, чтобы пожать подсеть.Тем не менее, оставив мой ответ здесь для его объяснения.

0 голосов
/ 03 октября 2018

Выполнение вашей программы перед началом потока.

добавьте pthread_join(leThread, NULL); в конце main()

или добавьте sleep(1); и не забудьте включить <unistd.h>для sleep()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...