选择显示字体大小

在vb程序中处理随机事件

  在程序设计过程中,如何轻松地处理众多的随机事件,往往是制作大型系统首先要考虑的问题之一。用c语言开发windows程序时,可以方便地使用消息机制(message),但是,设计vb程序时,就没有这样的方便条件了。 例如,多个窗口同时打开同一个表(table),当在一个窗口中对数据进行了修改,而其他的窗口也能够随之进行数据更新,这时就需要有一条说明数据改变了的消息在所有的窗口间进行广播。如果使用的语言是c,只需要定义一条用户消息(usermessage),就可以实现这一点。

  可是如果是用vb编程,做起来就不是那么简单了,最初我是试着这样实现的:
  自定义了一个消息结构(vbmsg),并在程序的主窗体内,建立一个消息广播引擎,主要由一个消息队列和一个定时消息广播器所组成。消息广播器固定隔一定时间检查一次消息队列,如果有消息存在,就将其发送给所有的打开的窗口,并将该消息从队列中删除。如此再定义一个全局的消息发送过程(sendmsg),将要发送的消息(vbmsg)送入消息队列。

  这样当需要广播消息时,只需填充好消息结构,调用sendmsg过程即可。这里较为复杂的是消息广播器如何将消息发送到各窗口:这需要作个硬性规定,就是每一个窗体都必须定义一个形式完全相同的消息接收函数(recmsg),在这个函数中对接收到的消息进行处理,当然也可以什么都不做。

  有了这样的规定之后,消息广播器在进行广播时,就可以是利用vb系统定义的全局变量forms,遍历所有的窗体,并调用一遍每个窗体的消息接收函数,其样子大致如下:


  public sub sendmsgtoforms(msg as vbmsg)

  dim frm as form

  for each frm in forms

  frm.recmsg msg

  next frm

  end sub



  通过上面的这些过程,就可以实现在独立的程序中,对随机事件进行异步处理。这一方法我曾经在早期开发的几个系统中使用,效果基本还是令人满意的。但是它有几个较大的局限性,当开发更大一些的系统时,就显得不能够满足需要。主要有以下几点:

  1.定时检查消息队列,需要利用timer控件进行触发。这在程序运行时,就必然要牺牲一部分效率;

  2.消息广播的范围限定在一个程序模块内,如果整个系统分成多个大的模块,那么存在于动态连接模块(.dll)中的窗体,将不能直接接收到广播消息。而要想实现进程间的消息传递,这一方法就更加不可能;

  3.消息的接收者只能是窗体,而做为真正的基础单元--“类”却无法直接接收消息。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons