Halcon之多线程Halcon之多线程Halcon之多线程

开多线程

par_start <ThreadID> : read_image (Image1, 'printer_chip/printer_chip_01')

等待多个线程都结束

* 开启两个子线程
par_start <ThreadID1> : producer_proc()
par_start <ThreadID2> : consumer_proc()
* 等到两个子线程都结束
par_join ([ThreadID1, ThreadID2])

示例1:

******************************************************************
************************* halcon实现多线程*************************
******************************************************************
* 开启多个子线程
par_start <ThreadID1> : read_image (Image1, 'printer_chip/printer_chip_01')
par_start <ThreadID2> : read_image (Image2, 'printer_chip/printer_chip_01')
par_start <ThreadID1> : read_image (Image3, 'printer_chip/printer_chip_01')
par_start <ThreadID2> : read_image (Image4, 'printer_chip/printer_chip_01')
par_start <ThreadID1> : read_image (Image5, 'printer_chip/printer_chip_01')
par_start <ThreadID2> : read_image (Image6, 'printer_chip/printer_chip_01')
par_start <ThreadID1> : read_image (Image7, 'printer_chip/printer_chip_01')
par_start <ThreadID2> : read_image (Image8, 'printer_chip/printer_chip_01')
par_start <ThreadID1> : read_image (Image9, 'printer_chip/printer_chip_01')
par_start <ThreadID2> : read_image (Image10, 'printer_chip/printer_chip_01')
* 等到多个子线程都结束(从这里开始执行子线程)
par_join ([ThreadID1, ThreadID2])

示例2:

* This is a simple example program that demonstrates the
* option to call several HALCON operators or procedures in parallel.
* In general, owing to the overhead of thread creation,
* not in all cases a speedup can be expected,
* especially, if the used operators are already parallelized
* internally using the automatic operator parallelization.
*
* Number of loops to get a more robust time measurement
Loops := 3
*
* Initialize visualization
dev_update_off ()
dev_close_window ()
read_image (Image, 'barcode/mixed/barcodes_datacodes_mixed_01')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (Image)
disp_message (WindowHandle, 'Read codes sequentially and multithreaded (multiple times)', 'window', 12, 12, 'black', 'true')
*
* Part A
*
* Show thread creation overhead
*
* Thread creation causes a significant overhead.
* Therefore, it is not advisable to create threads for fast tasks.
*
count_seconds (T1)
for L := 1 to Loops * 10 by 1par_start<Thread1> : do_nothing ()par_start<Thread2> : do_nothing ()par_start<Thread3> : do_nothing ()* par_join basically takes as long as the slowest thread (plus overhead).* Use the profiler to check execution times.par_join ([Thread1,Thread2,Thread3])
endfor
count_seconds (T2)
* Time needed to create and join the three threads in milliseconds
TimeOverhead := 1000.0 * (T2 - T1) / (Loops * 10)
*
* Part B
*
* Show perfect parallelization
*
* The best speedup can be achieved for long running tasks
* that are not parallelized internally.
*
count_seconds (T1)
for L := 1 to Loops by 1par_start<Thread1> : wait_seconds (1)par_start<Thread2> : wait_seconds (1)par_start<Thread3> : wait_seconds (1)* par_join basically takes as long as the slowest thread (plus overhead).* Use the profiler to check execution times.par_join ([Thread1,Thread2,Thread3])
endfor
count_seconds (T2)
* This should be about 1000 milliseconds
TimeWaitSeconds := 1000.0 * (T2 - T1) / Loops
*
* Part C
*
* Read bar codes and data codes in parallel
*
*
* Create the bar code and data code models
create_data_code_2d_model ('QR Code', [], [], QrCodeModel)
create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'maximum_recognition', Ecc200Model)
create_bar_code_model ([], [], BarCodeModel)
*
* Training
find_data_code_2d (Image, QrCodeXldsSeq, QrCodeModel, ['stop_after_result_num','train'], [2,'all'], QrCodeHandlesSeq, QrCodeStringsSeq)
find_data_code_2d (Image, Ecc200XldsSeq, Ecc200Model, ['stop_after_result_num','train'], [2,'all'], Ecc200HandlesSeq, Ecc200StringsSeq)
find_bar_code (Image, BarCodeRegionsSeq, BarCodeModel, ['EAN-13','Code 128'], BarCodeStringsSeq)
*
* Execute once to fill cache
find_qr_codes (Image, QrCodeXldsSeq, QrCodeModel, QrCodeHandlesSeq, QrCodeStringsSeq)
find_ecc200_codes (Image, Ecc200Xlds, Ecc200Model, Ecc200Handles, Ecc200Strings)
find_bar_codes (Image, BarCodeRegions, BarCodeModel, BarCodeStrings)
*
* Read codes sequentially
count_seconds (T1)
for L := 1 to Loops by 1find_qr_codes (Image, QrCodeXldsSeq, QrCodeModel, QrCodeHandlesSeq, QrCodeStringsSeq)find_ecc200_codes (Image, Ecc200Xlds, Ecc200Model, Ecc200Handles, Ecc200Strings)find_bar_codes (Image, BarCodeRegions, BarCodeModel, BarCodeStrings)
endfor
count_seconds (T2)
*
TimeSeq := 1000.0 * (T2 - T1) / Loops
*
* Read codes in parallel
count_seconds (T1)
for L := 1 to Loops by 1par_start<ThreadQRCode> : find_qr_codes (Image, QrCodeXlds, QrCodeModel, QrCodeHandlesSeq, QrCodeStringsSeq)par_start<ThreadECC200> : find_ecc200_codes (Image, Ecc200Xlds, Ecc200Model, Ecc200Handles, Ecc200Strings)par_start<ThreadBarcode> : find_bar_codes (Image, BarCodeRegions, BarCodeModel, BarCodeStrings)* par_join basically takes as long as the slowest thread (plus overhead).par_join ([ThreadQRCode,ThreadECC200,ThreadBarcode])
endfor
count_seconds (T2)
TimePar := 1000.0 * (T2 - T1) / Loops
*
* Calculate speedup
Speedup := 100 * ((TimeSeq / TimePar) - 1)
*
* Display result
dev_set_draw ('margin')
dev_set_line_width (4)
dev_set_color ('yellow')
dev_display (QrCodeXlds)
dev_set_color ('green')
dev_display (Ecc200Xlds)
dev_set_color ('cyan')
dev_display (BarCodeRegions)
Color := ['forest green','red']
disp_message (WindowHandle, 'Multithreading speedup: ' + Speedup$'.2f' + '%', 'window', 42, 12, Color[Speedup < 1], 'true')
*
clear_bar_code_model (BarCodeModel)
clear_data_code_2d_model (Ecc200Model)
clear_data_code_2d_model (QrCodeModel)

Halcon之多线程相关推荐

  1. HALCON: 内存管理(Memory Management)

    内存管理(Memory Management) .net框架的运行时环境CLR(公共语言运行时)有一种被称为垃圾收集器的机制,CLR使用它来从内存中移除不再需要的.net对象. 正如前面提到的,在导出 ...

  2. halcon 形状匹配

    halcon 形状匹配 1.例子 指定模板图像区域(也可以用draw_rectangle1画一个矩形) Row1 := 188 Column1 := 182 Row2 := 298 Column2 : ...

  3. halcon read_ocr_trainf 从文件中读取训练字符并转换为图像

    目录 read_ocr_trainf(算子) 描述 参数 read_ocr_trainf(算子) read_ocr_trainf - 从文件中读取训练字符并转换为图像. read_ocr_trainf ...

  4. halcon get_image_pointer1获取图像指针

    目录 get_image_pointer1(算子) 描述 参数 get_image_pointer1(算子) get_image_pointer1 - 访问单通道图像的指针. get_image_po ...

  5. Halcon产品描述

    产品简介: HALCON是德国MVTec公司研发的高性能通用图像处理算法软件包,由1400多个图像处理算子和多种交互式开发工具组成.满足各类机器视觉应用领域需求的专业软件,可应用于多种行业. 用HAL ...

  6. halcon初级应用攻略

    标准 Halcon 应用攻略 1.Halcon 的自我描述 Program Logic ? Each program consists of a sequence of HALCON operator ...

  7. halcon中面到面的距离_halcon学习网

    1. 无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异.什么原因引起? 初步诊断是,显示的时候调用的颜色查找表存在异常不是 default ,而是其它选 ...

  8. Halcon学习---图像采集助手

    目录 (一)打开图像采集助手 (二)图像资源的获取方式 1.图像获取接口 2.图像文件 3.可通过快捷键Ctrl+ r读取图像 (三)连接相机,设置参数 1.连接相机,采集图像 2.设置相机参数 (四 ...

  9. Halcon学习之图像采集

    Halcon学习之图像采集 1.读取文件夹中的图片 1.1打开Halcon12开发环境 1.2打开"助手"中的"Image Acquistion" 1.3选择& ...

最新文章

  1. 汇报的时候注意的事项
  2. 一个基于 React 开发的PC端音乐App
  3. Mr.J-- jQuery学习笔记(十三)--选项Tab卡
  4. Java 全栈知识体系( PDF 可下载)
  5. 百度云盘资源下载器分享【只要有分享地址+提取码】
  6. php第一季视频教程 李,李炎恢老师PHP系列课程第一季基础视频教程_PHP教程
  7. 干货 | 携程Elasticsearch数据同步实践
  8. 解决“为了对电脑进行保护,已经阻止此应用”问题
  9. 一站式WPF--依赖属性(DependencyProperty)一
  10. 2011年11月编程语言排行榜:Objective-C有望成为2011年年度编程语言。
  11. 【高精】Oliver的成绩
  12. 人脸 解锁 android开发,零基础开发Android人脸识别应用
  13. 对数数学知识回忆(log)
  14. web项目上云_联想Filez—携手浙江中烟,发力“云”端,打造“烟草上云”新势能...
  15. [OHIF-Viewers]医疗数字阅片-医学影像-中间插播一下-es6-使用const加箭头函数声明函数相对于function声明函数有什么好处?...
  16. slf4j无法写入日志文件问题
  17. selenium中鼠标操作:ActionChains类
  18. 腾讯手游助手王者服务器,腾讯手游助手王者荣耀正在定位无法进入的解决教程...
  19. 计算机专业机房 英语,计算机与网络英语词汇(C3)
  20. 华硕ProArt 创16体验:全新交互+顶级屏幕 更匹配创作的笔记本

热门文章

  1. 一文学透设计模式——抽象工厂模式
  2. 广大松田计组期末复习3
  3. eNSP 简易telnet配置
  4. 使用sudo apt-get update报错:E: 无法下载 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/dists/xenial/main/b
  5. 【蓝桥杯单片机(17)】第六届蓝省赛-温度记录器
  6. 51单片机入学第五课——蜂鸣器的原理与应用
  7. 数据表明全球TOP100万域名中仅23.5%支持IPv6访问
  8. 关于vue的title标签中出现的htmlWebpackPlugin.options.title
  9. week_03手写笔记
  10. input禁止浏览器记住密码