我是新来的,使用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
答案 0 :(得分:0)
你的程序运行正常。您遇到的问题是您的main()函数在您的线程实际运行之前返回,这会导致您的程序退出。
证明这一点的一种简单方法是在回复之前在sleep(5);
中添加main()
。更好的方法是找到一种方法使main()等到它的所有线程在返回之前完成。一种合理的方法是在执行pthread_join的Thread类中添加析构函数,并确保实际调用析构函数:delete th;