




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LabWindows/CVI教程(8)多线程程序设计主讲:乔立岩Email:(交作业)MSN:(在线交流)Tel:86413532ext.8611(逸夫楼611)2023/4/51.线程和进程进程常被定义为应用程序的运行实例。线程是指进程内部的可独立执行的单元,是操作系统对系统资源的基本调度单位。每个进程至少拥有一个线程,这个线程被称为主线程(mainthread)。一个进程也可以拥有多个线程,同属于一个进程的所有线程都共享进程的虚拟地址空间,线程之间可以共享进程的全局数据和资源。
2023/4/52.多线程程序(Multi-Threading)多线程程序就是在同一个时间段内至少有两个线程在执行程序代码的程序。在多线程程序中,程序自己让操作系统创建主线程之外的其它线程,这些线程被称作次线程。(secondarythread)次线程和主线程的主要差别就在于线程在何处开始执行。主线程一般开始执行程序的main或WinMain函数;程序开发者确定每一个次线程开始执行的函数。操作系统允许一个特定线程执行的时段被称作一个时间片(time-slice)。操作系统暂停一个线程的执行,转而允许另一个线程执行它的时间片的行为被称作线程切换(thread-switch)。
2023/4/53.多线程的优点改善吞吐量,避免阻塞提高响应速度和更有效的后台处理减少运行过程和用户界面的相互影响最大程度利用多处理器的性能
2023/4/54.两种多线程机制异步定时器适用于在固定时间间隔内执行的任务调用toolslib.fp函数NewAsyncTimer,把想要在次线程中执行的函数名称传递给它,并且设定每次函数执行的时间间隔intNewAsyncTimer(doubleInterval,intCount,intInitial_State,void*Event_Function,void*Callback_Data);intCVICALLBACKFunctionName(intreserved,inttimerId,intevent,void*callbackData,inteventData1,inteventData2);toolslib库使用一个多媒体定时器线程执行注册在一个程序里的所有异步定时器回调,因此,如果想要在程序里并行执行多个函数,建议使用线程池函数2023/4/54.两种多线程机制(2)
线程池(threadpools)适用于需要不连续地执行多次或在循环中执行的任务调用实用库(UtilityLibrary)中的CmtScheduleThreadPoolFunction函数,把想要在次线程中执行的函数名传递给它,线程池调度这个函数在它的其中一个线程中运行。intCmtScheduleThreadPoolFunction(intpoolHandle,ThreadFunctionPtrthreadFunction,void*threadFunctionData,int*threadFunctionID);intCVICALLBACKThreadFunction(void*functionData);2023/4/5intCVICALLBACKDataAcqThreadFunction(void*functionData);intmain(intargc,char*argv[]){intpanelHandle;intfunctionId;if(InitCVIRTE(0,argv,0)==0) return-1;/*内存溢出*/if((panelHandle=LoadPanel(0,"DAQDisplay.uir",PANEL))<0) return-1;DisplayPanel(panelHandle);CmtScheduleThreadPoolFunction(DEFAULT_THREAD_POOL_HANDLE,
DataAcqThreadFunction,NULL,&functionId);RunUserInterface();DiscardPanel(panelHandle);CmtWaitForThreadPoolFunctionCompletion(DEFAULT_THREAD_POOL_HANDLE,functionId,0);return0;}intCVICALLBACKDataAcqThreadFunction(void*functionData){while(!quit){Acquire(...);Analyze(...);}return0;}2023/4/55.多线程间的数据保护为什么要保护数据如果一个变量被多个线程访问,必须保护它以确保它的数值不被破坏需要保护的数据种类在程序中只有多个线程访问的变量才必须需要保护。全局变量、静态局部变量和动态分配的内存位于公共内存区域,可以被程序中的所有线程访问,存放在这类内存区域中的数据必须保护以免多个线程同时访问。函数参数和非静态局部变量位于堆栈中,操作系统为每个线程分配了单独的堆栈,每个线程因此获得自己的参数和非静态局部变量的拷贝,所以参数和非静态局部变量不需要保护。2023/4/55.多线程间的数据保护(2)如何保护数据线程锁(threadlock)简单,容易出现阻塞和死锁,效率低线程安全变量(threadsafevariables)安全,不容易出错线程安全队列(threadsafequeues)
线程安全队列是为多个线程之间传递大批数据提供的一种机制。通常在程序中有一个线程产生一批数据,另一个线程需要操作这批数据的情况下会用到线程安全队列。例如,程序的一个线程用DAQ采集数据,而另一个线程分析或者在LabWindows/CVI的用户界面显示这些数据。2023/4/5intqueue;intpanelHandle;intmain(intargc,char*argv[]){if(InitCVIRTE(0,argv,0)==0) return-1;/*outofmemory*/if((panelHandle=LoadPanel(0,"DAQDisplay.uir“,PANEL))<0) return-1;/*创建一个容纳1000个双精度数据的队列,需要的时候还可以扩大*/CmtNewTSQ(1000,sizeof(double),OPT_TSQ_DYNAMIC_SIZE,&queue);CmtInstallTSQCallback(queue,EVENT_TSQ_ITEMS_IN_QUEUE,500,
QueueReadCallback,0,CmtGetCurrentThreadID(),NULL);CmtScheduleThreadPoolFunction(DEFAULT_THREAD_POOL_HANDLE,
DataAcqThreadFunction,NULL,NULL);DisplayPanel(panelHandle);RunUserInterface();...return0;}voidCVICALLBACKQueueReadCallback(intqueueHandle,unsignedint event,intvalue,void*callbackData){doubledata[500];CmtReadTSQData(queue,data,500,TSQ_INFINITE_TIMEOUT,0);}2023/4/56.线程的优先级Windows允许定义每个进程和线程中的工作的相对重要性,也就是优先级。如果设定一个进程或进程中的线程一个较高的优先级,这个进程或线程就比其它较低优先级的线程获得更大的优先权。这意味着当有多个线程准备运行时,允许最高优先级的线程先运行。Windows把优先级分成若干等级,所有在同一个进程中的线程拥有相同的优先等级。进程中的每一个线程都有一个相对于这个进程的优先等级的优先级。2023/4/57.线程局部变量线程局部变量和全局变量有些相似,它们都可以被任何线程访问。线程局部变量为每一个线程的访问保存独立的数值,而全局变量为所有线程保存单一的数值。程序同时在多个环境下执行一种特定的任务,为每一种环境派生出一个独立的线程。例如,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025租客签订租房合同时应注意哪些事项
- 2025年个体沿街商铺租赁合同
- 2025打印机的租赁合同样本
- 玩具行业新兴市场开发考核试卷
- 2025年棉服购销合同范本
- 2025电磁炉专卖店代理合同书范本
- 2025年多方合作的协议合同
- 2025年古董艺术品买卖合同模板
- 2025健身设备购销合同范本
- 2025商业店铺合作经营合同范本
- 新生儿常见导管护理
- 家政服务行业环保管理制度
- 完整的欠货款协议书范文范本
- 2024年山东省济宁市中考生物试题卷(含答案解析)
- 浙美版小学二年级下册美术教学计划及教案全册
- 健合集团在线测评原题
- 公路工程标准施工招标文件(2018年版)
- 个人理财-形考作业4(第8-9章)-国开(ZJ)-参考资料
- 2024年江西省职业院校技能大赛(研学旅行赛项)备考试题库(含答案)
- 人教版九年级数学复习教案全册
- 【建筑专业】16J914-1公用建筑卫生间(完整)
评论
0/150
提交评论