添sleep(1)线程创建了 不加sleep(1)则线程创建不成功
加sleep(1)线程创建了 不加sleep(1)则线程创建不成功
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
void *create(void *arg)
{
int *num;
num=(int *)arg;
printf("creat parameter is %d \n",*num);
return (void *)0;
}
int main(int argc,char *argv[])
{
pthread_t tidp;
int error;
int test=4;
int *attr=&test;
error=pthread_create(&tidp,NULL,create,(void *)attr);
if(error!=0)
{
printf("is not created \n");
return -1;
}
sleep(1);
printf("created \n");
return 0;
}
------最佳解决方案--------------------
线程还没开始运行。进程都退出了。。。。。
------其他解决方案--------------------
正解
------其他解决方案--------------------
#2楼 :2012-09-27 23:45:02主线程退出了,整个进程退出了,子线程也被强制结束,sleep(1)只是巧合,刚好子线程执行了一部分.
顶!
------其他解决方案--------------------
sleep(1);
你sleep(0);看看同样效果。
这是因为线程的缘故。
------其他解决方案--------------------
楼主创建不成功用什么标志啊来判断啊??
会输出is not created?
比较可能的是:
输出created,
但是
printf("creat parameter is %d \n",*num);
没输出。
因为程序快速结束了。线程被回收了
------其他解决方案--------------------
主线程退出了,整个进程退出了,子线程也被强制结束,sleep(1)只是巧合,刚好子线程执行了一部分.
------其他解决方案--------------------
你要让主线程不退出哈
sleep(5000000);
------其他解决方案--------------------
看MSDN的解释:
if the newly created thread exits too quickly, _beginthread might not return a valid handle .
如果线程退出太快,会返回invalid handle.
------其他解决方案--------------------
线程要发出活着的信号,否则谁知是死是活?
------其他解决方案--------------------
等待子线程结束才结束主线程
------其他解决方案--------------------
还有,sleep函数不会精确到1ms的
------其他解决方案--------------------
Hold 住你的主线程啊!
------其他解决方案--------------------
error=pthread_create(&tidp,NULL,create,(void *)attr);
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
void *create(void *arg)
{
int *num;
num=(int *)arg;
printf("creat parameter is %d \n",*num);
return (void *)0;
}
int main(int argc,char *argv[])
{
pthread_t tidp;
int error;
int test=4;
int *attr=&test;
error=pthread_create(&tidp,NULL,create,(void *)attr);
if(error!=0)
{
printf("is not created \n");
return -1;
}
sleep(1);
printf("created \n");
return 0;
}
------最佳解决方案--------------------
线程还没开始运行。进程都退出了。。。。。
------其他解决方案--------------------
正解
------其他解决方案--------------------
#2楼 :2012-09-27 23:45:02主线程退出了,整个进程退出了,子线程也被强制结束,sleep(1)只是巧合,刚好子线程执行了一部分.
顶!
------其他解决方案--------------------
sleep(1);
你sleep(0);看看同样效果。
这是因为线程的缘故。
------其他解决方案--------------------
楼主创建不成功用什么标志啊来判断啊??
会输出is not created?
比较可能的是:
输出created,
但是
printf("creat parameter is %d \n",*num);
没输出。
因为程序快速结束了。线程被回收了
------其他解决方案--------------------
主线程退出了,整个进程退出了,子线程也被强制结束,sleep(1)只是巧合,刚好子线程执行了一部分.
------其他解决方案--------------------
你要让主线程不退出哈
sleep(5000000);
------其他解决方案--------------------
看MSDN的解释:
if the newly created thread exits too quickly, _beginthread might not return a valid handle .
如果线程退出太快,会返回invalid handle.
------其他解决方案--------------------
线程要发出活着的信号,否则谁知是死是活?
------其他解决方案--------------------
等待子线程结束才结束主线程
------其他解决方案--------------------
还有,sleep函数不会精确到1ms的
------其他解决方案--------------------
Hold 住你的主线程啊!
------其他解决方案--------------------
error=pthread_create(&tidp,NULL,create,(void *)attr);