在pthread启动功能中没有cout打印

时间:2012-03-10 15:39:49

标签: pthreads cout

我是新来的,使用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 :(得分:0)

你的程序运行正常。您遇到的问题是您的main()函数在您的线程实际运行之前返回,这会导致您的程序退出。

证明这一点的一种简单方法是在回复之前在sleep(5);中添加main()。更好的方法是找到一种方法使main()等到它的所有线程在返回之前完成。一种合理的方法是在执行pthread_join的Thread类中添加析构函数,并确保实际调用析构函数:delete th;