转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件使用 >> 常用软件 >> 正文
Pb中Yield()函数的使用         

Pb中Yield()函数的使用

作者:闵涛 文章来源:闵涛的学习笔记 点击数:702 更新时间:2009/4/24 21:42:56
P>Yield()函数是一个在 PB程序控制中非常有用的函数,如果能够合理使用它,一定可使你的程序操作友好很多。

  Yield()函数的功能是将控制权转移给其它图形对象,包括非 PowerBuilder对象。该函数检测消息队列,如果有消息,就把消息取出。

  该函数返回布尔型值,如果在消息队列中提取到了消息,那么函数返回 TRUE,否则返回 FALSE。。利用该函数可以在执行耗时较长的操作时把控制权转让给其它应用。

  用法正常情况下, PowerBuilder应用程序在执行一段代码(比如正在检索数据或者执行一段循环程序)的过程中不响应用户的操作。对耗时短暂的代码段来说,这种处理方式没有什么不妥的地方,但是,如果某个代码段的执行耗时较长(比如在大量数据检索或循环执行的代码中),应用程序又希望为用户提供更多的控制权,那么需要在这段代码中插入 Yield()函数,让用户能够进行其它操作,比如,允许用户按下其他窗口的“取消”按扭,而该按扭又改变了某个全局(共享)变量,在 Yield()函数接下来的代码中便可判断该全局(共享)变量的值,以决定下一步的操作。应用程序执行 Yield()函数后,如果发现消息队列中存在消息,它将允许对象处理这些消息,处理之后,继续 Yield()函数后面代码的执行。

  虽然用户在检索时不能做其他的事情,但是当你将 Yield()函数放在 RetrieveRow事件中时,用户能够同时运行其他的应用程序。当然,代码中插入 Yield()函数将降低应用程序的运行效率。

  示例 1.

  下面的代码执行一段耗时较长的过程,在其中我们插入了 Yield()函数,当用户单击窗口上的“取消”按钮时,终止这段代码的执行,其中使用共享变量 sb_interrupt来指示用户是否单击了“取消”按钮:

integer n

// sb_interrupt是共享变量

sb_interrupt = FALSE

FOR n = 1 to 3000

Yield()

IF sb_interrupt THEN

// sb_interrupt的值在“取消”按钮的 Clicked事件处理程序中修改

MessageBox("调试 ","用户中断 !")

sb_interrupt = FALSE

EXIT

ELSE

... // 其它处理

END IF

NEXT

  “取消”按钮的 Clicked事件处理程序可以写为: sb_interrupt = TRUE

  示例 2.

在本例当中,程序在交互 频诙龃翱谕笨梢源淼谝桓龃翱诘氖录H绻挥衁ield()函数,用户也可以控制第二个窗口,但在循环完成之前不能看到窗口焦点的变化。

integer n

FOR n = 1 to 3000

Yield()

... // Some processing

NEXT

  示例 3.

  In this example, a script wants to open a DDE channel with Lotus Notes, whose executable name is stored in the variable mailprogram. If the program isnt running, the script starts it and loops, waiting until the programs startup is finished and it can establish a DDE channel. The loop includes Yield, so that the computer can spend time actually starting the other program:

time starttime

long hndl

SetPointer(HourGlass!)

//Try to establish a handle; SendMail is the topic.

hndl = OpenChannel("Notes","SendMail")

//If the program is not running, start it

IF hndl $#@60; 1 then

Run(mailprogram, Minimized!)

starttime = Now()

// Wait up to 2 minutes for Notes to load

// and the user to log on.

DO

//Yield control occasionally.

Yield()

//Is Notes active yet?

hndl = OpenChannel("Notes","SendMail")

// If Notes is active.

IF hndl $#@62; 0 THEN EXIT

LOOP Until SecondsAfter(StartTime,Now()) $#@62; 120

// If 2 minutes pass without opening a channel

IF hndl $#@60; 1 THEN

MessageBox("Error", &

"Cant start Notes.", StopSign!)

SetPointer(Arrow!)

RETURN

END IF

END IF


[办公软件]在sybase中插入图片、PDF、文本文件  [办公软件]安装Sybase ASE
[办公软件]linux指令大全(完整篇)  [办公软件]Linux新手入门常用命令大全
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[办公软件]Linux程序员必读:中文化与GB18030标准  [办公软件]linux指令大全
[办公软件]制作Linux启动盘的四种方法  [办公软件]Linux文件系统的反删除方法
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 办公软件  · 系统软件
    · 常用软件  · 聊天工具
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台