C语言线程函数参数问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言线程函数参数问题相关的知识,希望对你有一定的参考价值。

C语言的线程就是异步调用一个函数,那么这个函数不能有参数,而且返回值也必须是void吗?如何将变量值传入,难道要用全局吗?

参考技术A ·线程创建
函数原型:int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);
返回值:若是成功建立线程返回0,否则返回错误的编号。

形式参数:pthread_t *restrict tidp要创建的线程的线程id指针;
const pthread_attr_t *restrict attr创建线程时的线程属性;
void* (start_rtn)(void)返回值是void类型的指针函数;
void *restrict arg start_rtn的形参。 =====这个地方就可以传参数,
注意,这个地方是个指针,要想传多个参数,可以定义一个结构体,把要传的参数包起来,传结构体的地址就ok本回答被提问者采纳

(C语言)多线程beginthreadex的第四个参数(结构体)到底怎么设置才能正确传递数值

struct test

long b[NUM];
long lleft;
long rright;
;

unsigned __stdcall FirstThreadFunc(void*) //第一个线程函数,函数里调用fun函数进行排序

int left=first.lleft;
int right=first.rright;
fun(first.b,left,right);



hThread[0]=(HANDLE)_beginthreadex(NULL,0,FirstThreadFunc,&first,0,&threadID[0]);

上面我的写法会报错,肯定错的。
能不能帮忙改一下,正确的写法是什么,以及函数里怎么样正确的传递,还有第四个参数的设置。

参考技术A 第四个参数的类型是LPVOID(long型指针),可以进行任意类型的转换,具体函数传参可以参考http://blog.csdn.net/morewindows/article/details/7421759。追问

不对,没有我要的结构体的传递办法

追答

将一个long型指针指向结构体就行了啊

以上是关于C语言线程函数参数问题的主要内容,如果未能解决你的问题,请参考以下文章

sleep()函数怎么具体在c语言中怎么用?

(C语言)多线程beginthreadex的第四个参数(结构体)到底怎么设置才能正确传递数值

QT/C++构造函数参数简单问题

c语言 结构体的指针作为函数参数问题

为线程函数c ++ 11获取多个参数

(C语言)为啥我这样调用线程里的结构体参数会报错