Перейти к содержанию
Fire Monkey от А до Я
  • 0

TThread.GetTickCount64 хелпер для TThread


Евгений Корепов

Вопрос

По умолчанию в TThread классовая функция GetTickCount имеет тип Cardinal, соответственно если приложение рассчитано на долговременную работу, то через 40 дней результат этой функции или уложит приложение (если отключена защита от переполнения) или превратит приложение в тыкву (если на этом завязана какая то логика).

Для своего проекта написал хелпер для класса TThread, вдруг кому пригодится. Тестил на win10 x64 и linux x64. 

unit UnitTThreadHelper;

interface

uses
{$IFDEF MSWINDOWS}
  Winapi.Windows,
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
  Posix.SysTypes,
{$IFDEF MACOS}
  Macapi.CoreServices,
{$ENDIF MACOS}
{$IFDEF ANDROID}
  Posix.Fcntl,
{$ENDIF ANDROID}
{$IFDEF LINUX}
  Posix.Time,
{$ENDIF LINUX}
{$ENDIF POSIX}
  System.Classes;

type
  TThreadHelper = class helper for TThread
    class function GetTickCount64 : Int64; static;
  end;

implementation

class function TThreadHelper.GetTickCount64 : Int64;
{$IF Defined(MSWINDOWS)}
begin
  Result := Winapi.Windows.GetTickCount64;
end;
{$ELSEIF Defined(MACOS)}
begin
  Result := AbsoluteToNanoseconds(mach_absolute_time) div 1000000;
end;
{$ELSEIF Defined(POSIX)}
var
  res: timespec;
begin
  clock_gettime(CLOCK_MONOTONIC, @res);
  Result := (Int64(1000000000) * res.tv_sec + res.tv_nsec) div 1000000;
end;
{$ELSE OTHERPLATFORM}
  {$MESSAGE Fatal 'Method not implemented for Platform'}
{$ENDIF OTHERPLATFORM}

end.

При попытке запуска на win x32 упадет  - не используйте или проверяйте битность:

  if CheckWin32Version(6, 0) then
  begin
    GetTickCount64;
  end else
  begin
    GetTickCount;
  end;

 

Ссылка на комментарий

Рекомендуемые сообщения

Ответов пока нет

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...