找回密码
 注册
Simdroid-非首页
查看: 586|回复: 0

CVI下的多线程技术 +11.5

[复制链接]
发表于 2002-8-29 18:57:07 | 显示全部楼层 |阅读模式 来自 山东青岛
应用程序开发环境Lab Windows/CVI中设计一个用户接口,实际上是在用户计算机屏幕上定义一个面板,它由各种控制项(如命令按钮、菜单、曲线等)构成。用户选中这些控制项就可以产生一系列用户接口事件(events)。例如,当用户单击一个命令按钮,这个按钮产生一个用户接口事件,并传递给开发者编写的C语言驱动程序。这是运用了Windwos编程的事件驱动机制。
测试系统软件可能包括数据采集、数据显示、仪器驱动等关键模块。在一次测试过程中,程序在同一个时刻往往有多个任务要做,它要将这些工作分开,独立运作,不互相影响,同时要保证各个工作的可靠性。cvi提供了多线程和TSQ达成这种目标。
从windows系统的角度来看,进程含有内存和资源。进程就是一大堆对象拥有权的集合。也就是说,进程拥有对象。进程可以拥有内存,可以拥有文件句柄(file handles),可以拥有线程等。进程和内存并没有真正做什么事情,一旦cpu开始执行程序代码,则就有了一个线程(主线程)。在同一时间同一个进程,我们可以拥有一大把线程,执行同一段代码。进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,有两个或多个线程正在运行,那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。进程所需要的系统资源比线程多。而线程使用的系统资源要少得多。实际上,线程只有一个内核对象和一个堆栈,保留的记录很少,因此需要很少的内存。
每隔2 0 m s 左右,Wi n d o w s要查看当前存在的所有线程内核对象。在这些对象中,只有某些对象被视为可以调度的对象。Wi n d o w s 选择可调度的线程内核对象中的一个,将它加载到C P U 的寄存器中,它的值是上次保存在线程的环境中的值。这项操作称为上下文转换。Wi n d o w s 实际上保存了一个记录,它说明每个线程获得了多少个运行机会。
在程序启动后,即产生一个主线程。主线程存活于整个程序生命期。数据采集线程由用户在主线程里产生或终止,主线程给数据采集线程发信号,使它产生或终止。即用户启动测量则主线程产生数据采集线程,停止测量或一次测量结束使数据采集线程终止。在程序中,主线程启动数据采集线程使用的是“事件”,而终止线程则依靠的全局变量(其实也是通过响应事件来实现值的改变)。主线程一直监视相关全局变量的值,如果相关全局变量值改变或者测量完成,则数据采集线程被终止。在程序启动后,绘图线程即被产生,它存活于整个程序生命期。该线程主要是把数据采集线程采集到的数据显示出来。这两个线程之间的通信是通过“事件”。数据采集线程把采集到的数据放到tsq中,则系统产生EVENT_TSQ_ITEMS_IN_QUEUE事件,系统一直监视这个事件是否产生,当这个事件为有信号状态,则调度绘图线程作出响应,把数据显示在绘图控件上。如果这个事件没有产生,则绘图线程被挂起。
更多的资料可以参考cvi提供的例子:位于安装目录如下位置:labwindows\samples\utility\Threading
windows下的多线程编程技术可以参考《windows核心编程》
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-18 17:24 , Processed in 0.043148 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表