后台任务

    有一些任务在运行的时候,并不需要与用户交互。它们通常在不打扰用户其它工作的时候默默的执行。这样的任务叫后台任务。与之对比,前台任务就是用户看得见的。
    比如,一个文本编辑软件,帮助用户上编辑文字的任务都是前台执行的。如果这个软件做得好,最好还有自动保存文件的功能,这样在系统突然崩溃之后,不至于所有用户做的改动都白费。自动保存这个功能一般都被作为后台任务,他在执行时,不打扰用户其它工作。
    后台任务的应用还有很多。在 LabVIEW 中实现后台任务的方法,就是使用 VI Scripting 技术,动态把负责后台的任务在新的线程里启动起来。下面以一个比较常用的功能来说明后台任务是如何实现的。

    大型 LabVIEW 程序启动的时候可能会比较慢,这是因为程序在它所有的子VI都被装入内存之后才能执行。把大量子VI装入内存可能要花费几秒钟的时间,如果这段时间,什么都不显示给用户,用户可能会以为是程序出错或者死机了,从而做出一些错误的操作。好的做法是,在启动程序的时候立刻显示给用户一个提示界面,告诉用户程序正在装载,已经装载的进度。同时把所有的子VI装入内存,然后再启动程序的主界面。
    在程序显示启动画面这个阶段,当子VI全部装入内存后,启动画面仍然显示在前台,而程序会再启动一个后台任务,把主程序运行起来。之后,启动画面程序把自己关闭,而主程序界面也从后台跳到前台来了。
    启动画面的程序代码如下图所示:

    它由5个部分组成:
    第1部分负责把主程序的子VI都装入内存(用 Open VI Reference 函数打开这些子 VI 就可以把它们装入内存)。这部分与后台任务无关,不细说了。
    第2部分 Open VI Reference 函数打开主程序的主VI,它的输入是主VI的地址。后续使用到的针对这个 VI 的 Scripting 函数,都依赖于在此打开的 VI 的引用。
    第3部分设置主VI的 Front Panel:Open 属性。这个属性值为真的时候,主程序的界面被显示出来。在我们这个程序中,主程序最终是要跳到前台来与用户交互的,所以需要显示他的界面。有些后台任务,比如自动保存任务,没有交互界面,就不需要设置此属性。
    第4部分调用主VI的 Run VI 方法。调用这个方法之后,主程序开始运行。目前主程序还是作为后台任务在运行。这里需要注意的是 Run VI 方法的两个参数:
    Wait Until Done 参数如果设为真,启动画面程序运行到这里就会暂停下来,一直等到后台任务结束,才继续执行后面的代码。但是,作为启动画面程序,我们显然不希望出现这种情况。我们需要让前台任务和后台任务同时执行,所以这个参数在本程序中被设为“假”。后台程序在另一个线程中被执行,它的结束与否不影响当前程序的执行,我们的启动画面程序会立即去执行下一条语句。
    用 Open VI Reference 函数打开的引用必须被关掉,否则,VI被装入内存,却从来不被卸除出内存,就会引起内存泄漏。Auto Dispose Ref 参数用于决定由谁来关闭动态运行起来的VI的引用,是前台任务,还是后台任务自己。真对于我们的例子,后台任务是主程序,我们希望用户关闭它的同时,把它从内存中卸除。所以实例中这个参数的值是“假”,后台程序结束时自动释放引用。对于那些没有界面的后台任务,它们的启动、停止都需要由前台程序来控制。这是这个参数就需要被设为“真”。前台程序还需要这个引用来停止后台任务、卸除后台任务的VI。
    第5部分是对启动画面VI自身进行操作的。程序运行到这里,主程序已经运行起来,而启动画面程序的使命也已完成,应当让位给主程序了。启动画面程序在此调用 Front Panel:Close 把自己关闭。

《我和 LabVIEW》目录

Advertisements

四大名著的评注

    我找同事帮忙,下载了全套的百家讲坛,于是没事的时候就听听。文学名著的评析是百家讲坛中比重较大的一类主题。而在这类主题中,中国的古典四大名著更是重中之重。尽管上百家讲坛的都是有点研究成就的人,但从我的角度来看,他们的水平仍然良莠不齐。
    明显看得出,学术界对《红楼梦》的研究远超过其它著作,众多的学者都从自己的角度对其进行了注解。讲《三国》的人不多,但易中天一个人讲的就足够充实了。《水浒》和《西游记》最可怜,仅有的几个讲座也是索然无味。

    专家们不知都干啥去了,倒是在网上看过不少非专业人士对《水浒》《西游》的评注,写的都非常好。推荐一些给大家。
    评注《水浒》的有一部系列文章《闲看水浒》。这部文集主要分析的是梁山上的政治环境。我自己读水浒的时候还小,只看了热闹,还真没注意过水浒里的派系斗争、座次排名等问题。经它这么一解释,水浒中山贼们的管理方式跟现代的企业甚至政府也很相似呢,可以借鉴。《闲看水浒》写的还很幽默,闲来值得一看。
    在我看来《水浒》也许本意还是写造反的,《闲看水浒》作者的想像比较丰富;而《西游记》本身目的之一就是为了讽刺官场。不过还没看到比较好的大部头《西游记》评论作品,零星文章倒是有不少。随便搜搜,看到一篇《唐僧为什么要取经》,正好可以给还没看懂《西游》的人启蒙一下。

 《生活随笔》目录

继续写一点零散的冬天记忆

    春节回来,又想起了一些小时候冬天的有趣记忆。是到了南方之后体验不到的。

    尽管天气很冷,我有时候洗完了澡,从澡堂出来不戴帽子就往外跑。等跑到家,头发上没干的水全都冻成了冰。感觉就是头上顶了一个硬硬的壳。
    把吐沫吹成一个泡泡挂在嘴巴上,过一会吐掉。泡泡不会破,因为已经冻成冰了。掉在地上的是薄薄冰碎片。

    到教学楼外面的水房去洗拖把,然后把拖把头往大铁门上一甩,拖把就会牢牢的粘在上面。拖把头挨着铁皮的部分瞬时就会被冻住。
    同样的道理,脱了手套去抓露在屋外的金属门把手是很危险的,手上总有些汗,很可能被冻在门上。当时听说有个邻居小孩淘气的非常有创意,居然用舌头去添一个门把手,结果被粘在上面动不了。幸好及时被家里人发现,一盆热水下去才把舌头解了冻。

《生活随笔》目录

雪的记忆

    这几天上海下了100年来最大的一场雪,同事们都极其激动。街头、路边堆起了各式各样的雪人。又在高中同学录上有人说他那儿零下13度了,已经感觉冷的不行了,真不知道小时候是咋过来的。就是啊,这样的雪落在东北,根本不会引起任何兴奋。
    我上大学之前一直呆在齐齐哈尔,黑龙江西部的一个城市,冬天最低气温可以降到零下三十度以下。从小就在这样的环境下生长,也不觉得这是多么辛苦的一件事。但是,现在回头想想,倒是有些钦佩那时的自己,还是很坚强的。

    我记忆里,齐齐哈尔十月初就可以结冰了。初中的时候,一到国庆节,学校就会让我们去收集树叶,用以帮助学校葡萄园里的葡萄过冬。葡萄自己熬不过黑龙江的寒冬。因此,秋天葡萄叶一落,我们就要把葡萄株整棵埋到地下。然后再在上面盖上一米多厚的树叶。堆积的树叶腐烂生热,刚好给葡萄取暖。
    地上散落的树叶通常是和冰雪混杂在一起的,因此我才印象深刻。不过这样的劳动可以换来一两斤葡萄,当时还是相当开心的。

    下雪后,受影响最大的就是交通。我高中时候是骑自行车上学的,下过雪的路面经过车辆压实,和冰面的摩擦力差不多,却没冰面那么平整,一棱一棱的。这种路面最不适合骑车了,车胎随时都会侧向滑动几厘米。幸好我腿够长,一路上用脚撑着路面,不会有太大危险。这姿势大概和最原始的自行车骑法差不多。
    在这种路面上千万不能转弯,否则,就是用脚也撑不住。我有时候精神溜号,没注意轮子下面是冰雪,一歪车把,就会直接躺在地上,然后滑出去七八米远。
    刹车也很危险,一次看到一个路人骑自行车跟在一辆汽车后面。汽车刹车时,他也一捏车闸,结果刺溜一声,倒在地上滑行一段钻到汽车下面去了。跟电影里的摩托特技有得一比。

    有雪有风的时候最痛苦,东北的风比上海大得多(没台风的时候:),五六级的风是常有的。这样的冷风吹在脸上像刀割一样疼。而且,如果顶风是根本骑不动自行车的。这时就只能推着自行车走,或者拐来拐去迂回前进。

    其实,上大学离开家乡已经很久了,好多记忆都已经模糊了。前两年又回东北一次,很多情景,和感觉才有重新回想起来。
    比如冻手:上次回家看冰雕时打算拍照,把手从手套中拿出来,在零下25度的空气里暴露了一会。才又回忆起那种感觉,不叫冷,叫疼。跟上海的冬天不戴手套就骑自行车上班的感觉是完全不一样的。

《生活随笔》目录