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个以上,都可以考虑使用结构体封
装,这样对外你的接口很简洁清晰,你的函数的消费者使用起来也很方便,只需要对结构体各个成员赋值即可,避免了参数很多时漏传、误传(参数串位)的问题
结构体内包含结构体完全没有问题,很多应用都这么使用
时间: 2024-08-04 09:30:49

pthread_create如何传递两个参数以上的参数的相关文章

C# 使用多线程如何传递两个以上参数的实现方法(附示例)

某些情况下当我们启动一个线程的时候会向该线程传递参数,有时除了功能上需要之外,我觉得还有就是为了我们能管理好启动的线程组(当然,只开一两个线程什么的也谈不上不好管理了,我说的线程组是指10+的线程,我们很难去主动控制的). 因为刚接触C#,所以还没有在C#下用过多线程去实现某些功能.通过学习我发现单纯的去启动线程很容易,反而是想要往线程中传一些参数变得有点说道了,这里我想说传入参数的数量为>=2.不过我们还是一步一步的来,带大家过一遍C#下的多线程怎么搞. 以上一篇讲的网络通信的例子,把整个过程

修改 window.setTimeout,使之可以传递参数和对象参数

/* 功能:修改 window.setTimeout,使之可以传递参数和对象参数 使用方法: setTimeout(回调函数,时间,参数1,,参数n) */ var _setTimeout=setTimeout; window.setTimeout=function(callback,time,params){ var param=Array.prototype.slice.call(arguments,2); var _callback=function(){ callback.apply(n

java动态获取WebService的两种方式(复杂参数类型)

java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_FlightOrderSearchRequest request) { Object myAllMessage; OrderSearchListRes response = null; try { String endpoint = carGlobalSetting.getEndpoint(); JaxWsD

实现html与html 页面之间传递参数以及接收参数

html与html 页面之间传递参数以及接收参数 要实现html与html页面之间进行参数传递,只需要在html页面中添加如下js代码即可 <script type="text/javascript"> <!--获取页面之间的传递的参数--> function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)

两个jsp之间传参数乱码

两个jsp之间传参数乱码 一.问题描述: 一个jsp传中文参数调另一个jsp,浏览器接到的参数显示乱码,以下是我个人解决办法,希望有所帮助~~ 二.问题解决办法: 1.传参数的jsp(一定要两个encodeURI): 路径/文件名.jsp?title=' + encodeURI(encodeURI(title)); 2.接参数的jsp(建议接参数解码时判空,否则这个参数不传时,会报错): //引入<%@ page import="java.net.URLDecoder" %>

c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

 一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会对调用者的初始变量产生任何影响. 当方法传递的参数是引用类型是,只是将变量的引用复制到目标参数中,实参和形参的引用指向内存中的同一位置.所以,在目标方法中对形参所做的更改会影响调用者的初始变量. 二.一些特殊的方法参数 1.引用参数---ref (使值类型的变量做方法参数时也可以传引用) 一些数据类型(

可选参数、命名参数、.NET的特殊类型、特性

1.可选参数和命名参数    1.1可选参数        语法:            [修饰符] 返回类型 方法名(必选参数n,可选参数n)        注意:            1.必选参数可以不存在,也可以有多个:可选参数可以有1个或多个            2.可选参数必须放在必选参数之后            3.可选参数在定义时需要赋初始值            4.可选参数之间也需要使用,进行分隔            5.调用可选参数时,不能跨参数赋值    1.2命名

C#值参数、引用参数和输出参数

一.值参数:在使用参数时,是把一个值传递给函数使用的一个变量.对函数中此变量的任何修改都不会影响函数调用中指定的参数.(由于函数只有一个返回值,不能用作参数的多个变量值). 二.引用参数:即函数处理的变量与函数调用中使用的变量相同,而不仅仅是值相同的变量.因此,对这个变量的任何改变都会影响用作参数的变量值.需用ref关键字指定参数.用作ref参数的变量有两个限制,由于函数可能会改变引用参数的值,所有必须在函数调用中使用“非常量”变量.其次,必须使用初始化过的变量. 三.输出参数:out关键字,指

My.Ioc 代码示例——使用默认构造参数和覆盖参数

在 Ioc 世界中,有些框架(例如 Autofac/NInject/Unity)支持传递默认参数,有些框架(例如 SimpleInjector/LightInjector 等)则不支持.作为 My.Ioc 来说,我们支持默认参数. 当我们在 My.Ioc 中注册对象时,有些对象类型 (System.Type) 要求我们必须提供默认参数,而有些则不是必要的.在 My.Ioc 中,默认参数有两个作用:1. 容器根据默认参数来选择用于构建对象的构造函数.而一旦选定构造函数之后,今后容器便会一直使用该构