Re: [问题] pthread及参数为指标的问题

楼主: descent (“雄辩是银,沉默是金”)   2018-10-11 18:26:20
#include <stdio.h>
int ret;
void *(myf) (void *arg)
{
int *my_arg_L = (int *)arg;
printf("myf arg: %p\n", arg);
printf("my_arg_L: %d, %d\n", my_arg_L[0], my_arg_L[1]);
ret = 99;
return &ret;
}
int create(void *(*start_routine) (void *), void *arg)
{
printf("arg: %p\n", arg);
start_routine(arg);
return 0;
}
int main(int argc, char *argv[])
{
int p=2, q=100;
int arg_L[2] = { p, q-1 };
printf("arg_L: %p\n", arg_L);
int r = create(myf, (void *)arg_L);
printf("r: %d\n", r);
return 0;
}
模拟的程式行为, 让你参考看看。
※ 引述《skyHuan (Huan)》之铭言:
: 开发平台(Platform): (Ex: Win10, Linux, ...)
: Linux
: 额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
: pthread
: 问题(Question):
: 最近在做多执行绪的实作遇到两个问题
: 1.
: 因为pthread_create要呼叫的函式需要的参数是用指标宣告
: 所以函式的参数宣告成(void *)
: 我用一个args array传入参数
: 那这个参数在函式中该怎么取用呢
: 我写的直接用arg[0], arg[1]应该是错的
: compiler会有dereferencing "void *" pointer的warning
作者: skyHuan (Huan)   2018-10-11 22:45:00
感谢您还想了一个例子,我对函式间的传递呼叫有更了解了!另外请问一个问题,您create韩式的参数宣告void *(*start_routine) (void *),我的理解是create收一个void型别的地址,这个地址是函式(*start_routine) (void *)的地址,所以呼叫时直接传myf,意思是myf这个函式在当引数时是以这个函式的地址传入,这样对吗
作者: Lipraxde (Lipraxde)   2018-10-11 23:57:00
start_routine 是一个 point 指向回传 void * 的 function
作者: x246libra (楓)   2018-10-12 00:06:00
变量怎么唸 可以看这篇 https://bit.ly/2PtkDmO
作者: skyHuan (Huan)   2018-10-12 00:12:00
懂了!感谢大家这个板真的好多大神有你们真好><

Links booklink

Contact Us: admin [ a t ] ucptt.com