设为首页 加入收藏

TOP

6.6.1 向线程传递参数
2013-10-07 12:58:59 来源: 作者: 【 】 浏览:70
Tags:6.6.1 线程 传递 参数

6.6.1  向线程传递参数

程序清单6-1显示了主线程从命令行给线程执行的函数传递一个参数。命令行参数还用于确定要创建的线程的数目。

程序清单6-1

  1. //Listing 6-1 Passing arguments to a thread from the command line.  
  2.                 
  3. 1  using namespace std;  
  4. 2  
  5. 3  #include <iostream> 
  6. 4  #include <pthread.h> 
  7. 5  
  8. 6  
  9. 7  void *task1(void *X)  
  10. 8  {  
  11. 9      int *Temp;  
  12. 10     Temp = static_cast<int *>(X);  
  13. 11  
  14. 12     for(int Count = 0;Count < *Temp;Count++)  
  15. 13     {  
  16. 14         cout << "work from thread: " << Count << endl;  
  17. 15     }  
  18. 16     cout << "Thread complete" << endl;  
  19. 17     return (NULL);  
  20. 18  }  
  21. 19  
  22. 20  
  23. 21  
  24. 22  int main(int argc, char *argv[])  
  25. 23  {  
  26. 24     int N;  
  27. 25  
  28. 26     pthread_t MyThreads[10];  
  29. 27  
  30. 28     if(argc != 2){  
  31. 29         cout << "error" << endl;  
  32. 30          exit (1);  
  33. 31     }  
  34. 32  
  35. 33     N = atoi(argv[1]);  
  36. 34  
  37. 35     if(N > 10){  
  38. 36         N = 10;  
  39. 37     }  
  40. 38  
  41. 39     for(int Count = 0;Count < N;Count++)  
  42. 40     {  
  43. 41         pthread_create(&MyThreads[Count],NULL,task1,&N);  
  44. 42  
  45. 43     }  
  46. 44  
  47. 45  
  48. 46     for(int Count = 0;Count < N;Count++)  
  49. 47     {  
  50. 48         pthread_join(MyThreads[Count],NULL);  
  51. 49  
  52. 50     }  
  53. 51     return(0);  
  54. 52  
  55. 53  
  56. 54   }  
  57. 55  
  58. 56 

第26行声明了MyThreads,它是规模为10的数组,数组中的每一项类型为pthread_t。N持有命令行参数。在第41行,创建了MyThreads数组中的N个线程。N作为类型为void *的参数传递给每个线程。在函数task1中,该参数从void *强制类型转换为int *,如下所示:

  1. 10 Temp = static_cast < int * > (X); 

函数执行一个循环,其迭代次数为传递给函数的值。函数将它的消息发送到标准输出。创建的每个线程执行这个函数。程序清单6-1的编译和执行指示包含在稍后位置的程序概要6-1中。

这个例子向线程函数传递一个命令行参数,并且使用该命令行参数来决定要创建的线程的数目。如果有必要向线程函数传递多个参数,您可以创建一个包含所有需要的参数的结构体(struct)或容器,然后将指向该数据结构的指针传递给线程函数。我们将在本章稍后部分介绍一种更容易的方式来完成这个目的,即创建线程对象。

程序概要6-1

程序名:

  1. program6-1.cc (程序清单6-1) 

描述:

从命令行接收一个整数,并将该值传递给线程函数。线程函数执行一个循环,该循环向标准输出发送消息。参数用作循环变量的结束条件。参数还决定了要创建的线程数目,每个线程执行相同的函数。

必需的库:

  1. libpthread 

必需的头文件:

  1. <pthread.h> <iostream> 

编译和链接指令:

  1. c++ -o program6-1 program 6-1.cc -lpthread 

测试环境:

  1. Solaris 10、gcc 3.4.3和gcc 3.4.6 

处理器:

  1. Opteron和UltraSparc T1 

执行指令:

  1. ./program6-1 5 

注释:

这个程序要求一个命令行参数。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.6.3 获得线程id 下一篇6.5 简单的线程程序

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: