先来张自学提问图:
自学提问图中的栗子:
(1)线程函数只有一个参数的情况:直接定义一个变量通过应用传给线程函数。
#include <iostream>
#include <pthread.h>
using namespace std;
pthread_t thread;
void fn(void *arg){
int i = *(int *)arg;
cout<<"i = "<<i<<endl;
return ((void *)0);
}
int main(){
int err1;
int i=10;
err1 = pthread_create(&thread, NULL, fn, &i);
pthread_join(thread, NULL);
}
(2)线程函数有多个参数的情况:这种情况就必须申明一个结构体来包含所有的参数,然后再传入线程函数,具体如下:
首先定义一个结构体:
struct parameter
{
int size,
int count;
```
};
然后在main函数将这个结构体指针,作为void *形参的实际参数传递
struct parameter arg;
通过如下的方式来调用函数:
pthread_create(&ntid, NULL, fn,& (arg));
函数中需要定义一个parameter类型的结构指针来引用这个参数
void fn(void *arg){
int i = *(int *)arg;
cout<<"i = "<<i<<endl;
return ((void *)0);
}
void thr_fn(void *arg){
struct parameter *pstru;
pstru = ( struct parameter *) arg;
// 然后在这个函数中就可以使用指针来使用相应的变量的值了。
}