Нет печати cout в функции запуска pthread - PullRequest
0 голосов
/ 10 марта 2012

Я новичок здесь и noob с программированием pthread.Моя проблема в классе C ++, который я пытаюсь создать для инкапсуляции потока.Читая вокруг, я видел, что когда я создаю pthread, мне нужно передать функцию C в pthread_create, чтобы он запускался при запуске ... Итак, когда pthread запускает эту функцию, он не отслеживает сообщение на stdout!

Но лучше, если вы увидите код: (очевидно, он скопирован и вставлен из интернет-учебника ^^)

void *runAtStart( void *threadid)
{

    long tid;
   tid = (long)threadid;

   printf("Hello World! It's me, thread #%ld!\n", tid);
   pthread_exit(NULL);
}


Thread::Thread() {
    pthread_t threads[1];
   int rc;
   long t;
   for(t=0; t<1; t++){
      printf("In main: creating thread %ld\n", t);
      rc = pthread_create(&threads[t], NULL, runAtStart, (void *)t);
      if (rc){
         printf("ERROR; return code from pthread_create() is %d\n", rc);
        // exit(-1);
      }
   }
}

в основном я называю это как:

int main()
{
    Thread *th=new Thread();
    return 0;
}

сгенерированный вывод:

In main: creating thread 0

Я надеюсь, что кто-то понял!Извините за мой английский!:) Inzirio

1 Ответ

0 голосов
/ 10 марта 2012

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

Простой способ доказать это - добавить sleep(5); в main() до вашего обратного звонка. Лучший способ - найти способ заставить main () ждать, пока все его потоки не завершатся, прежде чем он вернется. Один разумный способ сделать это - добавить деструктор в ваш класс Thread, который выполняет pthread_join, и быть уверенным, что вы действительно вызываете деструктор: delete th;

...