gpt4 book ai didi

c - 线程函数应该返回 0 吗?

转载 作者:太空狗 更新时间:2023-10-29 15:19:59 25 4
gpt4 key购买 nike

我有一个 void 函数,带有一个指向我的线程的指针。当我去编译时,我收到警告:“控件到达非空函数的末尾”。如果我这样做

void mythread (void *arg)

函数 i 将解决编译器给出的警告,但会得到一个新的警告,上面写着:

TA.c:50:2: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default]

然后,我将 return 0; 放在“mythread”函数的末尾,它就编译了。但我不确定这样做是否正确?

我正在尝试学习 POSIX 系统服务编程。我不确定该怎么做。

建议?我应该尝试输入 cast argument 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;
}

最佳答案

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

您的代码可以在调用pthread_join() 后看到返回结果。您可以使用 0 表示成功。如果这不能满足您的要求,您可以选择不同的值。

关于c - 线程函数应该返回 0 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18197969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com