自学:pthread_create函数和向线程函数传递参数

先来张自学提问图:

pthread_create().png

自学提问图中的栗子:

(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;
// 然后在这个函数中就可以使用指针来使用相应的变量的值了。
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容