PC SOFT

WINDEV的在线文档

  • 函数“定时器”与“系统定时器”的区别
  • 加锁或不加锁的操作
  • 过程的执行时间
  • 调用定时器的处理
  • 定时器和同级窗口
  • 定时器和线程
  • 定时器和Windows服务
产品
WinDevWebDev-服务器代码WebDev-浏览器代码WinDev Mobile报表和查询
平台
WindowsLinuxWindows MobileWindows PhoneWindows Store appsAndroidAndroid Widget iPhone/iPad
语言
JavaPHPAjax用户代码(MCU)外部语言
数据库
HFSQLHFSQL Client/Server存储过程HF 5.5OLE DBODBC本地访问

周期性地自动地调用一个W语言过程。 在一个过程中,使用函数定时器可以鉴别启动该过程的定时器。

我们将一个过程的周期性调用的频率称为定时器。 该周期性的调用将通过函数结束定时器被停止。

WinDev 自动过程的使用可让我们避免使用函数定时器。 有关详细信息,请查阅自动过程
例子
// 用于在EDT_TIME1中周期地显示时间的过程
过程DISP_TIME()
EDT_Time1系统时间()

// 当打开窗口或页面时的处理
// DISP_TIME会自动在每秒都被调用
如果定时器"DISP_TIME"1001)=0,那么
错误"无法创建定时器"
结束

语法

周期性地启动一个过程 隐藏详细信息

<结果> = 定时器(<过程名称> , <频率> [, <号码>])
<结果>: 整数
  • 打开的定时器号码(<号码>,若该参数被指明),
  • 0,若定时器无法被打开。
<过程名称>: 字符串
需周期性启动的W语言过程的名称。
<频率>: 整数
定时器两次调用过程之间经过的时间(单位为百分之一秒)。 频率的精确度取决于系统的等待状态。
<号码>: 可选的整数
由定时器指定的号码。 若该参数被指明,那么定时器的号码将会是选择的该号码。 若该号码对应于一个已存在的定时器,那么它将会停止并被新的定时器取代。

WinDev用户代码(MCU)

获取定时器的号码 隐藏详细信息

<结果> = 定时器()
<结果>: 整数
调用了当前过程的定时器的号码。

注意
WinDevWindows用户代码(MCU)

函数“定时器”与“系统定时器”的区别

  • 函数定时器使用一个由WinDev生成的定时器。 在这种情况下,调用频率从定时器被调用的时候开始计算。
  • 函数系统定时器使用一个由系统生成的定时器。 在这种情况下,调用频率从该过程结束的时候开始计算。
建议: 大多数情况下,使用函数“系统定时器”。
函数定时器消耗的资源超过了函数系统定时器并且只有当WinDev的窗口在当前的时候才能运行(若一个对话框正在显示,那么定时器会停止)。

WinDevWindows用户代码(MCU)

加锁或不加锁的操作

WinDevWindows用户代码(MCU)

过程的执行时间

若由定时器调用的过程的处理时间超过了调用每个过程之间所要求的时间,那么定时器的这些调用不会堆积: 只会有一个调用在等待。

WinDevWindows用户代码(MCU)

调用定时器的处理

  • 项目代码:
    • 若函数定时器在项目的代码中被调用,那么定时器就与项目相关联。 定时器由函数结束定时器和应用程序的结束而中断。 被定时器调用的过程必须是:
      • 项目的一个全局过程: 定时器("<全局过程>", 1000)。 您无法传递参数给被调用的过程(使用全局变量)。
      • 一个类中的一个静态方法: 定时器("<类>::<静态方法>", 1000)
    • 若函数定时器在项目的“打开”的处理中被调用,或者没有窗口被打开,那么定时器将会在整个项目中有效。 它处于等待状态,并且一旦有一个窗口被打开或者调用了函数多任务,它将会自动被触发。
  • 一个窗口,一个控件或一个本地过程的代码:
    若函数定时器在一个窗口,一个窗口的控件或者一个窗口的本地过程的代码中被调用,那么定时器会与该窗口相关联。 定时器由函数结束定时器和窗口的关闭而中断。 定时器调用的过程必须:
    • 窗口的一个本地过程: 定时器("<本地过程>", 1000)。 您无法传递参数给被调用的过程(使用全局变量)。
    • 项目的一个全局过程: 定时器("<全局过程>", 1000)。 您无法传递参数给被调用的过程(使用全局变量)。
    • 一个类中的一个静态方法: 定时器("<类>::<静态方法>", 1000)
  • 一个类的静态方法的代码:
    若函数定时器在一个类的静态方法中被调用,那么定时器就与该类相关联。 定时器由函数结束定时器和应用程序的结束而中断。 被定时器调用的过程必须是:
    • 类中的一个静态方法: 定时器("::<静态方法>", 1000)
    • 一个其他类中的一个静态方法: 定时器("<类>::<静态方法>", 1000)
    • 项目的一个全局过程: 定时器("<全局过程>", 1000)
  • 一个项目的一个方法的代码:
    若函数定时器在一个对象的一个方法中被调用,那么定时器就与该对象相关联。 定时器由函数结束定时器或对象的释放而中断。 被定时器调用的过程必须是:
    • 对象的一个非静态方法: 定时器("<:方法>", 1000)
    • 对象的类的一个静态方法: 定时器("::<静态方法>", 1000)
    • 一个其他类中的一个静态方法: 定时器("<类>::<方法>", 1000)
    • 项目的一个全局过程: 定时器("<全局过程>", 1000)

WinDevWindows用户代码(MCU)

定时器和同级窗口

在打开多个生成一个定时器的同一个窗口的情况下(MDI里的同级窗口),您必须在使用函数定时器时不指定定时器的号码。 这样的话,将会自动的分配一个定时器的号码到每个窗口。

WinDevWindows用户代码(MCU)

定时器和线程

通过函数定时器系统定时器从一个辅助线程启动的过程(函数线程执行) 不会被调用。 事实上,一个辅助线程没有界面(也就是说不打开窗口): 该辅助线程不会像应用程序的主线程一样收到系统的消息(消息循环)。

WinDevWindows

定时器和Windows服务

若想从一个Windows服务使用函数定时器,您必须通过服务器代码从一个打开的窗口调用该函数。

注意: 我们不建议用该方式。 若想从一个服务器重复一个处理,我们建议您从一个服务器代码调用该处理(服务器代码通过循环来执行)。

组件
WinDev wd200vm.dll