C++ pthread 线程传参

 线程传参

 (1)pthread_create(&semop_threadID, NULL, semopFun, a);     int类型地址赋值给void *

 (2)num = (int *) param;                                                                 void * 强制转换成 int * 

 运行结果  

 编译:g++ -o pthread pthread.cpp -lpthread

 测试1

 使用 pthread_join(semop_threadID, &p);  主线程阻塞,结果如下:

注释pthread_join(semop_threadID, &p);  主线程非阻塞,结果如下:   

源代码

//g++ -o pthread pthread.cpp -lpthread
#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <iostream>
#include <unistd.h>

using namespace std;

// 函数的格式必须是这样的. void* name(void * param)
void *semopFun(void * param)
{
	
	int * num= NULL;
	num = (int *) param;	 // void * 强制转换成 int * 
	*num = 111;  
 	 
	while(1)
	{
		cout<<"Delay 3 seconds!"<<endl;
		sleep(3);
		*num = *num + 1;	
		cout << "<semopFun> the number is  : " << *num <<endl;
		cout<<"thread out"<<endl;	
	}
	
			
	/*
		线程结束后,传值出去,
		给pthread_join()的参数2
	*/
	pthread_exit((void *)11);
}


int main()
{
	  int *a ;
	  *a = 100;
	  pthread_t semop_threadID = NULL;
	  /*
		第一个参数为指向线程标识符的指针。
		第二个参数用来设置线程属性。
		第三个参数是线程运行函数的起始地址。
		最后一个参数是运行函数的参数。
	 */
	  //int类型地址赋值给void *
	  pthread_create(&semop_threadID, NULL, semopFun, a);
	
	  //cout << " NUM : " << *a <<endl; 

	  /*
	    pthread_join 
	    参数1:线程标识符
	    参数2:pthread_exit()参数返回
	   	  如果线程还未运行完毕主线程会被阻塞在此,不再向下执行.
	  */
	  void *p = NULL;
	  pthread_join(semop_threadID, &p);
      while(1)
	  {
		sleep(2);
		printf("Delay 2 seconds ! \n");
		cout << "<main function> the number is  : " << *a <<endl;		
	  }

	  cout << "p: " <<(int*) p << endl;
	  cout << "OVER" << endl;
	  return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42121713/article/details/114024912