以编程方式和精确时间添加到系统时间

时间:2015-06-27 09:23:14

标签: delphi winapi clock

我写了一个游戏的速度,绕过了一个特定的时间。游戏让你等5分钟。它首先查看系统时间,当计时器(5分钟)完成时,它会再次比较系统时间并检查延迟是否为5分钟。

游戏的伪代码:

var t = GetSystemTime();
WaitMinutes(5);
if (GetSystemTime() - t != 5000)
{
  Error;
}

我手动绕过它:

等到游戏等了1分钟,这样剩下4分钟的等待时间。准确地改变系统时钟+ 4分钟。

然后使用CE或我的工具快速进行游戏。

但是,我想以编程方式执行此操作,而且我的工作方式似乎不够准确。

  GetLocalTime(systimecurr);
  wmin := systimecurr.wMinute + iWaitingTime;
  whour := systimecurr.wHour;
  wday := systimecurr.wDay;
  wsecs := systimecurr.wSecond + iWaitingTimeSeconds;



  if wsecs >= 60 then
  begin
    wsecs := wsecs mod 60;
    wmin := wmin + 1;
  end;

  if wmin >= 60 then
  begin
    wmin := wmin mod 60;
    whour := whour + 1;
    if whour >= 24 then
    begin
      wday := wday + 1;
    end;
  end;

  SetDateTime(systimecurr.wYear, systimecurr.wMonth, wday, wHour,
              wmin, wsecs, systimecurr.wMilliseconds);

我知道这可能不准确,但我实际上并不知道如何完美地完成它。

再次说明:我需要将时间(例如5分钟)添加到系统时钟中,然后恰好将其检索到的偏移量!

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

好吧,我让它上班了。小代码之间实际上有很长的时间:D

QueryPerformanceCounter解决了它!

这里有正确的代码:

$this->datatables
        ->select("id, date, reference_no, biller, customer, sale_status, grand_total, paid, (grand_total-paid) as balance, payment_status")
        ->from('sales')
        ->where('due_date <=', date('Y-m-d'))
        ->where('payment_status =', 'pending')
        ->where('payment_status =', 'partial');