添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(1)只是巧合,刚好子线程执行了一部分.

还有,sleep函数不会精确到1ms的
------其他解决方案--------------------
Hold 住你的主线程啊!

------其他解决方案--------------------
error=pthread_create(&tidp,NULL,create,(void *)attr);