labwindowscvi8多线程程序设计

上传人:go****ng 文档编号:244925305 上传时间:2024-10-06 格式:PPT 页数:13 大小:201KB
返回 下载 相关 举报
labwindowscvi8多线程程序设计_第1页
第1页 / 共13页
labwindowscvi8多线程程序设计_第2页
第2页 / 共13页
labwindowscvi8多线程程序设计_第3页
第3页 / 共13页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,/13,LabWindows/CVI教程(8),多线程程序设计,主讲:乔立岩,Email:(交作业),MSN:(在线交流),Tel:86413532 ext.8611 (逸夫楼611),10/6/2024,1.线程和进程,进程常被定义为应用程序的运行实例。,线程是指进程内部的可独立执行的单元,是操作系统对系统资源的基本调度单位。,每个进程至少拥有一个线程,这个线程被称为主线程(main thread)。,一个进程也可以拥有多个线程,同属于一个进程的所有线程都共享进程的虚拟地址空间,线程之间可以共享进程的全局数据和资源。,10/6/2024,2.多线程程序(Multi-Threading),多线程程序就是在同一个时间段内至少有两个线程在执行程序代码的程序。,在多线程程序中,程序自己让操作系统创建主线程之外的其它线程,这些线程被称作次线程。(secondary thread),次线程和主线程的主要差别就在于线程在何处开始执行。主线程一般开始执行程序的main或WinMain函数;程序开发者确定每一个次线程开始执行的函数。,操作系统允许一个特定线程执行的时段被称作一个时间片(time-slice)。,操作系统暂停一个线程的执行,转而允许另一个线程执行它的时间片的行为被称作线程切换(thread-switch)。,10/6/2024,3.多线程的优点,改善吞吐量,避免阻塞,提高响应速度和更有效的后台处理,减少运行过程和用户界面的相互影响,最大程度利用多处理器的性能,10/6/2024,4.两种多线程机制,异步定时器,适用于在固定时间间隔内执行的任务,调用,toolslib.fp,函数,NewAsyncTimer,,把想要在次线程中执行的函数名称传递给它,并且设定每次函数执行的时间间隔,int,NewAsyncTimer,(double Interval,int,Count,int,Initial_State,void*,Event_Function,void*,Callback_Data,);,int,CVICALLBACK,FunctionName,(,int,reserved,,,int,timerId,,,int,event,,,void*,callbackData,,,int,eventData1,,,int,eventData2);,toolslib,库使用一个多媒体定时器线程执行注册在一个程序里的所有异步定时器回调,因此,如果想要在程序里并行执行多个函数,建议使用线程池函数,10/6/2024,4.两种多线程机制(2),线程池(,thread pools,),适用于需要不连续地执行多次或在循环中执行的任务,调用实用库(,Utility Library,)中的,CmtScheduleThreadPoolFunction,函数,把想要在次线程中执行的函数名传递给它,线程池调度这个函数在它的其中一个线程中运行。,int,CmtScheduleThreadPoolFunction,(,int,poolHandle,ThreadFunctionPtr,threadFunction,void*,threadFunctionData,int,*,threadFunctionID,);,int,CVICALLBACK,ThreadFunction,(void*,functionData,);,10/6/2024,int CVICALLBACK DataAcqThreadFunction(void*functionData);,int main(int argc,char*argv),int panelHandle;,int functionId;,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,,RunUserInterface();,DiscardPanel(panelHandle);,CmtWaitForThreadPoolFunctionCompletion(DEFAULT_THREAD_POOL_HANDLE,functionId,0);,return 0;,int CVICALLBACK,DataAcqThreadFunction,(void*functionData),while(!quit),Acquire(.);,Analyze(.);,return 0;,10/6/2024,5.多线程间的数据保护,为什么要保护数据,如果一个变量被多个线程访问,必须保护它以确保它的数值不被破坏,需要保护的数据种类,在程序中只有多个线程访问的变量才必须需要保护。全局变量、静态局部变量和动态分配的内存位于公共内存区域,可以被程序中的所有线程访问,存放在这类内存区域中的数据必须保护以免多个线程同时访问。,函数参数和非静态局部变量位于堆栈中,操作系统为每个线程分配了单独的堆栈,每个线程因此获得自己的参数和非静态局部变量的拷贝,所以参数和非静态局部变量不需要保护。,10/6/2024,5.多线程间的数据保护(2),如何保护数据,线程锁(,thread lock,),简单,容易出现阻塞和死锁,效率低,线程安全变量(,thread safe variables,),安全,不容易出错,线程安全队列(,thread safe queues,),线程安全队列是为多个线程之间传递大批数据提供的一种机制。通常在程序中有一个线程产生一批数据,另一个线程需要操作这批数据的情况下会用到线程安全队列。,例如,程序的一个线程用,DAQ,采集数据,而另一个线程分析或者在,LabWindows,/CVI,的用户界面显示这些数据。,10/6/2024,int queue;,int panelHandle;,int main(int argc,char*argv),if(InitCVIRTE(0,argv,0)=0),return-1;/*out of memory*/,if(panelHandle=LoadPanel(0,DAQDisplay.uir“,PANEL)0),return-1;,/*创建一个容纳1000个双精度数据的队列,需要的时候还可以扩大*/,CmtNewTSQ(1000,sizeof(double),OPT_TSQ_DYNAMIC_SIZE,CmtInstallTSQCallback(queue,EVENT_TSQ_ITEMS_IN_QUEUE,500,QueueReadCallback,0,CmtGetCurrentThreadID(),NULL);,CmtScheduleThreadPoolFunction(DEFAULT_THREAD_POOL_HANDLE,,DataAcqThreadFunction,NULL,NULL);,DisplayPanel(panelHandle);,RunUserInterface();,.,return 0;,void CVICALLBACK,QueueReadCallback,(int queueHandle,unsigned int event,int value,void*callbackData),double data500;,CmtReadTSQData(queue,data,500,TSQ_INFINITE_TIMEOUT,0);,10/6/2024,6.线程的优先级,Windows,允许定义每个进程和线程中的工作的相对重要性,也就是优先级。,如果设定一个进程或进程中的线程一个较高的优先级,这个进程或线程就比其它较低优先级的线程获得更大的优先权。这意味着当有多个线程准备运行时,允许最高优先级的线程先运行。,Windows,把优先级分成若干等级,所有在同一个进程中的线程拥有相同的优先等级。进程中的每一个线程都有一个相对于这个进程的优先等级的优先级。,10/6/2024,7.线程局部变量,线程局部变量和全局变量有些相似,它们都可以被任何线程访问。,线程局部变量为每一个线程的访问保存独立的数值,而全局变量为所有线程保存单一的数值。,程序同时在多个环境下执行一种特定的任务,为每一种环境派生出一个独立的线程。例如,设计一个并行测试器的程序,为处理每一个被测设备派生一个线程,可以用线程局部变量保存每个设备的特定信息。,10/6/2024,上机作业(2选1),编写一个,LabWindows,/CVI,程序,功能自定,要求程序调用至少一个,Windows API,函数,通过这个作业掌握,Windows API,函数的使用方法。,使用异步定时器编写一个数据采集的多线程程序,和普通定时器比较二者运行时的差异。,10/6/2024,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!