监控程序受重视的程度远不如收费系统内的程序,尤其是在下级机构——分中心、监控所等等。监控员通常是在需要发布信息或者采集信息的时候才会打开软件,用完了就关掉了。即使经过多次强调,但仍有人会习惯性地或者不经意地把监控程序给关掉了。监控程序关掉了,就无法采集车检器、气象仪的原始数据了,此外,也无法与上级监控软件进行通讯了。因此,收费软件不间断地运行靠的是管理机制、行政手段,监控软件要想不间断地运行,就需要借助一些技术技巧了。

一些软件,跟采集设备没有关系的,例如通讯软件、省中心的软件,只需要加入避免二次运行(B2)、任务计划自启动功能即可。不过,一般的没有加入B2的程序,最简单的TForm的Application,在任务计划添加之后,似乎天生就具备了B2功能,加入了“B2”,则更保险了。这个问题就算解决了。

不过有些监控软件,例如哈伊的监控软件,长时间运行之后,似乎就麻木了似的,采集不上来车检器的数据了(气象仪坏掉了,压根就采不上来)。不过,程序重启一下,马上就又有数采上来了。因此,对于这样的软件,还需要在计划任务的基础上,加入一个自动关闭的功能。

开始的做法是把B2中的PostMessage(Handle, CM_Restore, …)换成SendMessage(Handle, WM_Close, …)。这么一来,在普通情况下,新运行的程序的确会把以前运行的实例先关闭后,再运行自己——就是一个置换、取代的过程。但加入计划任务以后,似乎并没有起到预期的效果,以前的实例仍在运行,新实例并未启动,看起来似乎是“天生B2”的情形,怎么试都不好使。

于是只好另辟蹊径,单独编写了一个小程序,主要的工作就是向一个具备指定特征的实例(即,以前运行的实例)Send WM_Close消息,然后它自己立即结束自己。这个方法比较奏效,在计划任务中,都加入这两个程序,运行的时间间隔一样,AutoClose先自动执行,监控软件再过一分钟也自动执行,这样,由于前一分钟AutoClose会把以前的实例关闭,而监控软件自身又具备自身和天生的B2功能,这样就可以不间断地运行了。