热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Timer控制问题

Timer控制问题VCL组件开发及应用http:www.delphi2007.netDelphiVCLhtmldelphi_20061223220551160.html现有2个过程
Timer控制问题 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061223220551160.html
现有2个过程A和B,A使用Timer控制每隔一定时间T执行一次,执行完成以后再执行B过程,如果B执行时间超过A的时间间隔T,这时Timer执行A的定时到了,程序会怎么处理?有没有其它好的方法去控制?线程吗

哈,进入Timer就enabled   :=   False;   B执行完了再True.

//会出现冲突  
  //建议判断一下是否在处理中  
   
  procedure   TForm1.Timer1Timer(Sender:   TObject);  
  begin  
      if   FRunning   then   Exit;  
      FRunning   :=   True;  
      try  
          A;  
          B;  
      finally  
          FRunning   :=   False;  
      end;  
  end;

楼上的方法也不错,用线程一样会碰到这样的问题

用消息传递来控制执行顺序和时间间隔最适宜

const  
      WM_A   =   WM_User   +   1;  
      WM_B   =   WM_User   +   2;  
   
  type  
      TFormDemo   =   class(TForm)  
          procedure   FormCreate(Sender:   TObject);  
      private  
          FTickCount:   LongInt;  
          procedure   A(var   Msg:   TMessage);   Message   WM_A;  
          procedure   B(var   Msg:   TMessage);   Message   WM_B;  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      FormDemo:   TFormDemo;  
   
  implementation  
   
  {$R   *.dfm}  
   
  {   TFormDemo   }  
   
  procedure   TFormDemo.FormCreate(Sender:   TObject);  
  begin  
      PostMessage(Handle,   WM_A,   0,   0);  
  end;  
   
  procedure   TFormDemo.A(var   Msg:   TMessage);  
  begin  
      FTickCount   :=   GetTickCount;  
      {ProcessA}  
      PostMessage(Handle,   WM_B,   0,   0);  
  end;  
   
  procedure   TFormDemo.B(var   Msg:   TMessage);  
  var  
      Interval:   Integer;  
  begin  
      {ProcessB}  
      Interval   :=   GetTickCount   -   FTickCount;  
      while   Interval   <  10000   do   //假设A的执行间隔为10秒  
      begin  
          Interval   :&#61;   GetTickCount   -   FTickCount;  
          Application.ProcessMessages;  
      end;  
      postMessage(Handle,   WM_A,   0,   0);  
  end;

我一般是设一个全局变量,A完成后设1.B发现变量为1,则进行下一步,然后再设为2.A发现为2,则下一步.

那就不要用Time来控制&#xff0c;用递归&#xff01;

我一般是设一个全局变量,A完成后设1.B发现变量为1,则进行下一步,然后再设为2.A发现为2,则下一步.  
  //  
  不牵扯到多线程当然可以这样&#xff0c;你这样做还会有问题吗&#xff1f;应该能够解决了&#xff01;



推荐阅读
  • 本文将深入探讨 iOS 中的 Grand Central Dispatch (GCD),并介绍如何利用 GCD 进行高效多线程编程。如果你对线程的基本概念还不熟悉,建议先阅读相关基础资料。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • 本文总结了Java初学者需要掌握的六大核心知识点,帮助你更好地理解和应用Java编程。无论你是刚刚入门还是希望巩固基础,这些知识点都是必不可少的。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • Java 中的等时日期(int,int)方法,示例 ... [详细]
  • h5调用本地摄像头和麦克风一
    h5调用本地摄像头和麦克风一,Go语言社区,Golang程序员人脉社 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
author-avatar
707282400_de0c8b
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有