多线程本地图片加载示例【OpenCV】【Pthread】

举报
ShaderJoy 发表于 2021/12/30 01:20:32 2021/12/30
【摘要】 Pthread barrier的简单使用示例: C++代码如下: // ThreadingLoadImages.cpp : 定义控制台应用程序的入口点。// #include "stdafx.h"#include <pthread.h>#include <opencv2/opencv.hpp> #define...

Pthread barrier的简单使用示例:


C++代码如下:


  
  1. // ThreadingLoadImages.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <pthread.h>
  5. #include <opencv2/opencv.hpp>
  6. #define THREADS 3
  7. // Barrier variable
  8. pthread_barrier_t barr;
  9. struct Param
  10. {
  11. cv::Mat img;
  12. int index;
  13. char* file_path;
  14. } params[THREADS];
  15. void* entry_point(void* arg)
  16. {
  17. Param* p = (Param*)arg;
  18. int index = p->index;
  19. char* file_path = p->file_path;
  20. p->img = cv::imread(file_path);
  21. printf("The %d thread is doing job! \n", index);
  22. // Synchronization point
  23. int rc = pthread_barrier_wait(&barr);
  24. if (rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD)
  25. {
  26. printf("Could not wait on barrier\n");
  27. exit(-1);
  28. }
  29. }
  30. int main()
  31. {
  32. pthread_t thr[THREADS];
  33. //pthread_mutex_init(&g_mtx, NULL);
  34. // Barrier initialization
  35. if (pthread_barrier_init(&barr, NULL, THREADS))
  36. {
  37. printf("Could not create a barrier\n");
  38. return -1;
  39. }
  40. //int t[THREADS];
  41. params[0].file_path = "../micky.png";
  42. params[1].file_path = "../umbrella.png";
  43. params[2].file_path = "../beard.jpg";
  44. for (int i = 0; i < THREADS; ++i)
  45. {
  46. //t[i] = i;
  47. params[i].index = i;
  48. if (pthread_create(&thr[i], NULL, &entry_point, (void *)&params[i]))
  49. {
  50. printf("Could not create thread %d\n", i);
  51. return -1;
  52. }
  53. }
  54. for (int i = 0; i < THREADS; ++i)
  55. {
  56. if (pthread_join(thr[i], NULL))
  57. {
  58. printf("Could not join thread %d\n", i);
  59. return -1;
  60. }
  61. }
  62. printf("All threads finish jobs! \n");
  63. for(int i=0; i<THREADS; i++)
  64. cv::imshow(params[i].file_path, params[i].img);
  65. cv::waitKey(0);
  66. return 0;
  67. }




相关资料:pthread线程使用小结 


文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/53216616

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。