我定义了一个CmdBuffer
type
  CmdBuffer_Record = Record
     ID:integer;              //条目编号
     Content:string;          //条目内容
     SendTime:TDateTime;      //发送时间
end;var CmdBuffer:Array of CmdBuffer_Record;现在我要用一定时器定时检测CmdBuffer中的内容,一旦SendTime的时间与现在时间相隔6秒,那么发送一次该条目,如果超过3次,那么删除该条目(即SendTime时间与现在时间相隔18秒)不知大家有什么好的方法,希望多写点哦,多写多给分:)

解决方案 »

  1.   

    用 timer的事件,不太难吧
      

  2.   

    啊,用timer 有什么问题呢?!
      

  3.   

    Content:string;          //条目内容
    const UINT MAX_LENGTH = 100;
    -> 不如用静态的数组更好 Content: array[0..MAX_LENGTH] of char;你首先要有一个大体思路
    1. 定时获取 如何获取 可以用Timer或者用单独的一个线程<虽然Timer也算是一个线程> timer的使用很简单的 
    2. 完成你的功能需求
    2.1 发送一次
    2.2  超过三次,但是你靠什么去判断,所以你这里需要考虑,可以考虑用全局变量,但是我觉得
    将你这个record更改一下更好
    type
      CmdBuffer_Record = Record
         ID:integer;              //条目编号
         Content:string;          //条目内容
         SendTime:TDateTime;      //发送时间
         nSendTimes:UINT;         // 发送次数
    end;
    每次发送前判断是否=3,... 就将nSendTimers+1,...总体说来不是很复杂哦。
      

  4.   

    最好建立另一个队列,用来盛放需要发送的节点,这样比较清晰。
    发现需要处理的节点,即将其从原有 Array中去掉!
    时钟的执行事件:执行一次检查,执行一次发送。
      

  5.   

    定义一个线程来做的话我觉得要比Timer好多了哈
      

  6.   

    "最好建立另一个队列,用来盛放需要发送的节点,这样比较清晰。
    发现需要处理的节点,即将其从原有 Array中去掉!
    时钟的执行事件:执行一次检查,执行一次发送。"
    bigben2008(ben)的方法比较好
    从别人软件上看到一个类似的问题,也是用这方法解决的。