当前位置: 技术问答>linux和unix
linux下pthread_create创建线程问题
来源: 互联网 发布时间:2016-06-15
本文导语: int main() { func(); return 0; } void* fn(void* lp) { ... while(1) { ... } } bool func() { // fn(this); // return true; pthread_t ntid; int rt=-1; rt=pthread_create(&ntid,NULL,fn,NULL); if(rt!=0) { printf("can't create thread: %sn",strerror(rt)); return false; } e...
int main()
{
func();
return 0;
}
void* fn(void* lp)
{
...
while(1)
{
...
}
}
bool func()
{
// fn(this);
// return true;
pthread_t ntid;
int rt=-1;
rt=pthread_create(&ntid,NULL,fn,NULL);
if(rt!=0)
{
printf("can't create thread: %sn",strerror(rt));
return false;
}
else
{
printf("线程启动成功!n");
return true;
}
}
如果不创建线程,直接用func()注释的两行是可以的
难道while(1)把线程阻塞了?
|
楼主的意思俺看懂了。
fn是子线程启动函数,干嘛在func里调用呢,
main->func->fn()->return就结束了,或者在fn里while(1)循环,无法走到pthread_create啊。
注释掉就对了,然后在main函数里的func();之后加sleep(60);或者pause();子线程就开始运行了。
fn是子线程启动函数,干嘛在func里调用呢,
main->func->fn()->return就结束了,或者在fn里while(1)循环,无法走到pthread_create啊。
注释掉就对了,然后在main函数里的func();之后加sleep(60);或者pause();子线程就开始运行了。
|
原因是主线程退出了。
在 main() 函数里面,当调用了 fun()创建线程后,加个等待线程退出的函数,比如 pthread_join(),
或者最简单的就是加个代码
while(1)
{
sleep(1);
}
试试看。
在 main() 函数里面,当调用了 fun()创建线程后,加个等待线程退出的函数,比如 pthread_join(),
或者最简单的就是加个代码
while(1)
{
sleep(1);
}
试试看。
|
在main() 中加个sleep(1) 再试试,
应该主线程退出了吧!
应该主线程退出了吧!
|
#include
unsigned int sleep(unsigned int seconds);
在while()里加个sleep()试试看
unsigned int sleep(unsigned int seconds);
在while()里加个sleep()试试看
|
程序调用写错了
rt=pthread_create(&ntid,NULL,fn,NULL);
应当是 &fn
rt=pthread_create(&ntid,NULL,fn,NULL);
应当是 &fn
|
fn表示的就是文件指针
|
不行是指进程阻塞住不运行了吗?还是显示错误:can't create thread。。。。
|
怎么不行啊?