zoukankan      html  css  js  c++  java
  • pthread_create如何传递两个参数以上的参数

    涉及多参数传递给线程的,都需要使用结构体将参数封装后,将结构体指针传给线程
    定义一个结构体
    struct mypara
    {
        var para1;//参数1
        var para2;//参数2
    } 
    将这个结构体指针,作为void *形参的实际参数传递
    struct mypara pstru;
    pthread_create(&ntid, NULL, thr_fn,& (pstru)); 
    函数中需要定义一个mypara类型的结构指针来引用这个参数
    void *thr_fn(void *arg)
    {
        mypara *pstru;
        pstru = (struct mypara *) arg;
        pstru->para1;//参数1
        pstru->para2;//参数2
    }
    pthread_create函数接受的参数只有一个void 
    *型的指针,这就意味着你只能通过结构体封装超过一个以上的参数作为一个整体传递。这是pthread_create函数的接口限定的,别人已经明确表明
    我只接受一个参数,你硬要塞给他两个肯定会出错了。所以通过结构体这种组合结构变通一下,同样实现了只通过一个参数传递,但通过结构指针对结构数据成员的
    引用实现多参数的传递
    这种用结构体封装多参数的用法不仅仅用在pthread_create函数中,如果你自己设计的函数需要的参数很多〉=5个以上,都可以考虑使用结构体封
    装,这样对外你的接口很简洁清晰,你的函数的消费者使用起来也很方便,只需要对结构体各个成员赋值即可,避免了参数很多时漏传、误传(参数串位)的问题
    结构体内包含结构体完全没有问题,很多应用都这么使用
  • 相关阅读:
    C# 根据节点索引访问XML配置文件
    C# AE 关于TOCControl
    C# AE 实现点选框选/点击选择要素
    C# AE 合并要素/合并图形/merger功能
    C# AE 对图层筛选要素后显示/只显示符合条件的要素
    css实现垂直水平居中的几种方法
    js中的DOM节点----文本节点
    js中的DOM节点操作---增删改查
    js中的6中继承方式
    js中的原型对象---prototype
  • 原文地址:https://www.cnblogs.com/jiu0821/p/5869516.html
Copyright © 2011-2022 走看看