pthread_create的返回值

上午做个测试程序,模拟多客户端测试服务器压力,开始时有的客户端总是显示断开连接,然后就去查客户端,发现有客户端没有收到消息,然后每个接收线程加日志,结果很奇怪,没有日志出来,怀疑是线程创建没有成功。

 

ret = pthread_create(&thread_id_recv[i], NULL, recv_thread, this);
        if (ret == -1)
        {
            printf("create thread tcp recv_thread failed erron= %d/n",errno);
            return false;
        }

 

 

 

有时候ret == -1 有时候会打印那个错误号总是errno==12,沿着这个错误找,就知道是内存不足了

 

 

 

后来查手册,发现返回值0才算是成功, 其他表示错误!

 

 

    ret=pthread_create(&thread_id_recv[i], NULL, recv_thread, this);
        if(ret != 0){
               printf("create thread tcp recv_thread failed/n");
                return 1;
        }

 

这个问题害我搞了一个上午,记录下

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
pthread_create函数是用于创建一个新的线程的函数,它的返回值是一个整数类型的错误码。如果返回值为0,则表示线程创建成功;如果返回值为非零值,则表示线程创建失败,具体的错误码可以通过查阅相关文档来获取。在创建线程时,可以通过传递一个回调函数作为参数,该回调函数将在新线程中执行。回调函数的返回值类型为void指针,可以根据需要进行类型转换。在回调函数中,可以执行一些特定的操作,并返回一个值作为线程的返回值。在主线程中,可以使用pthread_join函数来等待新线程的结束,并获取其返回值。 以下是一个示例代码,演示了pthread_create函数的使用和回调函数的返回值获取[^1]: ```c #include <stdio.h> #include <pthread.h> void *cb_fn(void *arg) //线程回调函数 { printf("in cb_fn\n"); return (void *)"OK"; } int main() { int ret; void *retval; pthread_t pid; ret = pthread_create(&pid, NULL, cb_fn, NULL); if (ret < 0) { printf("pthread_create error, ret=%d\n", ret); return -1; } pthread_join(pid, &retval); printf("retval = %s\n", (char *)retval); return 0; } ``` 在上述代码中,我们创建了一个新线程,并将cb_fn作为回调函数传递给pthread_create函数。在cb_fn函数中,我们打印了一条信息,并返回了一个字符串"OK"作为线程的返回值。在主线程中,我们使用pthread_join函数等待新线程的结束,并通过retval指针获取其返回值,并打印出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值