先來張自學(xué)提問圖:

pthread_create().png
自學(xué)提問圖中的栗子:
(1)線程函數(shù)只有一個(gè)參數(shù)的情況:直接定義一個(gè)變量通過應(yīng)用傳給線程函數(shù)。
#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)線程函數(shù)有多個(gè)參數(shù)的情況:這種情況就必須申明一個(gè)結(jié)構(gòu)體來包含所有的參數(shù),然后再傳入線程函數(shù),具體如下:
首先定義一個(gè)結(jié)構(gòu)體:
struct parameter
{
int size,
int count;
```
};
然后在main函數(shù)將這個(gè)結(jié)構(gòu)體指針,作為void *形參的實(shí)際參數(shù)傳遞
struct parameter arg;
通過如下的方式來調(diào)用函數(shù):
pthread_create(&ntid, NULL, fn,& (arg));
函數(shù)中需要定義一個(gè)parameter類型的結(jié)構(gòu)指針來引用這個(gè)參數(shù)
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;
// 然后在這個(gè)函數(shù)中就可以使用指針來使用相應(yīng)的變量的值了。
}