线程函数应该返回0吗?

j0h*_*j0h 4 c unix posix gcc-warning

我有这个void函数,带有指向我线程的指针.当我去编译时,我收到警告:"控制到达非空函数的结束".如果我做

void mythread (void *arg)
Run Code Online (Sandbox Code Playgroud)

和函数我将解决编译器给出的警告,但得到一个新的警告,说:

TA.c:50:2: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default]
Run Code Online (Sandbox Code Playgroud)

那么,我放在return 0;"mythread"函数的末尾,然后编译.但我不确定这是否是正确的做法?

建议吗?我是一名新手程序员,正在尝试学习POSIX系统服务编程.

所以我不知道该怎么做.我应该尝试输入演员参数3吗?我怎样才能编译我的程序,并获得零警告?

#include <limits.h>
#include <pthread.h>
#include <stdio.h>

void *mythread (void *arg)
{   
    printf("This my Thread Maybe...\n");    
}

int main()
{
    pthread_t mythread_id;
    pthread_attr_t mythread_attr;
    size_t stack_size;
    int detachstate;

    pthread_attr_init (&mythread_attr);
    pthread_attr_getdetachstate(&mythread_attr, &detachstate);
    if(detachstate == PTHREAD_CREATE_DETACHED)
    {
        printf("Current Deteached state is Detached\n");
    }
    else
    {
        printf("Current Detached state is Joinable\n");
    }

    pthread_attr_setdetachstate (&mythread_attr, PTHREAD_CREATE_DETACHED);
    pthread_attr_getdetachstate (&mythread_attr, &detachstate);

    if(detachstate == PTHREAD_CREATE_DETACHED)
    {
        printf("NEW DETACHED STATE is determined to be deteched\n");
    }
    else
    {
        printf("NEW DETACHED STATE is Determine to be Joinable\n");
    }

    pthread_attr_getstacksize (&mythread_attr, &stack_size);
    printf ("Default stack size is %d; minimum is %d\n", stack_size, PTHREAD_STACK_MIN);
    pthread_attr_setstacksize (&mythread_attr, PTHREAD_STACK_MIN*2);
    pthread_attr_getstacksize (&mythread_attr, &stack_size); 

    printf("NEW stack size is %d\n", stack_size);
    pthread_create (&mythread_id, &mythread_attr, mythread, 0);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

jxh*_*jxh 6

添加return 0到函数的末尾是正确的事情.函数签名是这样的,它应该返回一个值.该pthread库代码会期望返回一个返回值.将线程函数强制转换为错误的签名将导致未定义的行为.

您的代码可以在调用后查看返回结果pthread_join().你可以0用来表示成功.如果这不满足您,您可以选择不同的值.