![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в runtime показать время компиляции программы?
novill © (2006-08-15 22:53:00)сабж
Джо (2006-08-16 14:49:00) [1]> [11] novill © (16.08.06 14:39)
> угу, еще и сточки с запятой поставить :)
Истинно так :)
novill (2006-08-16 14:39:00) [2]> [9] Джо © (16.08.06 12:27)
> Исходник копировал с чернового варианта, там строковые константы
> еще заквотить нужно.
угу, еще и сточки с запятой поставить :)
KilkennyCat (2006-08-16 12:45:00) [3]> Ведь когда программа компилируется, программист обычно нифига
> не делает...
Ничего подобного. Если программист производит впечатление неработающего, это вовсе не означает, что он - не работает....
Помню, лет восемь назад, работало у меня одно чудо: даю вечером задание, к утру надо сделать. Сижу, работаю, периодически посматриваю, что делает чудо. Чудо играет.
Проходит час - чудо играет. Я не выдерживаю, спрашиваю о программе. отвечает, что помнит, к утру сделает. Проходит час. Чудо играет...
Чудо играло всю ночь.
А утром программа была готова, и близко к идеалу. Клиент был счастлив.
Когда она была сделана я так и непонял, ибо у меня ушло бы часа четыре на нее...
Джо (2006-08-16 12:27:00) [4]Исходник копировал с чернового варианта, там строковые константы еще заквотить нужно.
> [8] DrPass ©
Не дай бог работодателям прочитать этот пост :)
DrPass (2006-08-16 12:19:00) [5]
> Вуаля — имеем еще одну константу, _CompileDurationInSec.
> Правда, придумать этому практическое применение сложнее
Легко - складывать это значение от каждой компиляции, полученную сумму в конце дня вычитать делить на 3600 и умножать на стоимость рабочего часа программиста. А результат вычитать из его зарплаты. Ведь когда программа компилируется, программист обычно нифига не делает...
Ketmar (2006-08-16 11:37:00) [6]> [5] evvcom © (16.08.06 08:46)
бред всякий там.
novill (2006-08-16 11:33:00) [7]Джо, большое спасибо.
evvcom (2006-08-16 08:46:00) [8]А в PE заголовке есть DWORD, который используется для хранения даты и времени создания/модификации линкером. Или его дельфовый линкер не прописывает? Сам я не смотрел, что реально там находится.
Джо (2006-08-16 03:32:00) [9]> [2] Германн © (16.08.06 00:41)
> Дата/время или длительность? :-)
Длительность компиляции определить тоже несложно :) Вносим следующие исправления:
...
implementation
uses SysUtils, DateUtils;
var
Notifier: TCompileTimeNotifier;
LastCompileDt: TDateTime = 0;
procedure TCompileTimeNotifier.EventNotification(
NotifyCode: TEventNotification; var Cancel: Boolean);
var
Fv: TextFile;
Fn: string;
begin
if ToolServices.GetProjectName = '' then
Exit;
Fn := ExtractFilePath (ToolServices.GetProjectName) +
'CompileDateTime.inc';
try
case NotifyCode of
enBeforeCompile:
begin
AssignFile (Fv,Fn);
try
Rewrite (Fv);
LastCompileDt := Now();
WriteLn (Fv, '//');
WriteLn (Fv, '// Auto-generated compile datetime file for ' +
ExtractFileName (ToolServices.GetProjectName) + ' project');
WriteLn (Fv, '// Include it in your project with {$include CompileDateTime.inc} directive');
WriteLn (Fv, '//');
WriteLn (Fv, 'const');
WriteLn (Fv, ' _CompileDateTime = ', FloatToStr(Now));
WriteLn (Fv, ' _CompileTimeStr = ', TimeToStr(Now));
WriteLn (Fv, ' _CompileDateStr = ',DateToStr(Now));
WriteLn (Fv, ' _CompileDateTimeStr = ',DateTimeToStr(Now));
finally
CloseFile (Fv);
end;
end;
enAfterCompile:
begin
AssignFile (Fv,Fn);
try
Append (Fv);
WriteLn (Fv, ' _CompileDurationInSec = ',
FloatToStr(SecondSpan(Now(),LastCompileDt)));
finally
CloseFile (Fv);
end;
end;
end;
finally
ToolServices.ReloadFile(Fn);
end;
end;
Вуаля — имеем еще одну константу, _CompileDurationInSec. Правда, придумать этому практическое применение сложнее, чем написать этот AddIn :)
Джо (2006-08-16 02:58:00) [10]У меня в ряде старых проектов нужно было вместо номера версии (а она, в силу некоторых причин, обновлялась очень часто) выводить дату и время компиляции проекта.
Проблему решил написанием нехитрого AddIn'а , подключаемого к IDE.
Вот текст модуля CompileTimeExpert.pas.
{
AddInNotifier, срабатывающий при компиляции проекта.
Помещает в каталог с главным файлом проекта файл CompileDateTime.inc
с объявлением констант, содержащих актуальную дату и время компиляции проекта.
Автор: Каминский С.А.
}
unit CompileTimeExpert;
interface
uses Windows, ExptIntf, ToolIntf;
type
TCompileTimeNotifier = class(TIAddInNotifier)
public
procedure FileNotification(NotifyCode: TFileNotification;
const FileName: string; var Cancel: Boolean); override;
procedure EventNotification(NotifyCode: TEventNotification;
var Cancel: Boolean); override;
end;
procedure Register;
implementation
uses SysUtils;
var
Notifier: TCompileTimeNotifier;
procedure Register;
begin
//
end;
procedure TCompileTimeNotifier.EventNotification(
NotifyCode: TEventNotification; var Cancel: Boolean);
var
Fv: TextFile;
Fn: string;
begin
if (NotifyCode = enBeforeCompile) and (ToolServices.GetProjectName <> '') then
begin
Fn := ExtractFilePath (ToolServices.GetProjectName) +
'CompileDateTime.inc';
AssignFile (Fv,Fn);
try
Rewrite (Fv);
WriteLn (Fv, '//');
WriteLn (Fv, '// Auto-generated compile datetime file for ' +
ExtractFileName (ToolServices.GetProjectName) + ' project');
WriteLn (Fv, '// Include it in your project with {$include CompileDateTime.inc} directive');
WriteLn (Fv, '//');
WriteLn (Fv, 'const');
WriteLn (Fv, ' _CompileDateTime = ', FloatToStr(Now));
WriteLn (Fv, ' _CompileTimeStr = ', TimeToStr(Now));
WriteLn (Fv, ' _CompileDateStr = ',DateToStr(Now));
WriteLn (Fv, ' _CompileDateTimeStr = ',DateTimeToStr(Now));
finally
CloseFile (Fv);
ToolServices.ReloadFile(Fn);
end;
end;
end;
procedure TCompileTimeNotifier.FileNotification(
NotifyCode: TFileNotification; const FileName: string;
var Cancel: Boolean);
begin
end;
initialization
Notifier := TCompileTimeNotifier.Create;
ToolServices.AddNotifierEx(Notifier);
finalization
ToolServices.RemoveNotifier(Notifier);
Notifier.Free;
end.
AddIn устанавливается в среду стандартно, т.е, через меню Component/Install component...
После установки, при каждой компиляции любого проекта в каталоге с проектом будет автоматически генерироваться файл CompileDateTime.inc. В нем будут находиться следующие константы с указанием даты/времени последней компиляции проекта:
//
// Auto-generated compile datetime file for Project1.dpr project
// Include it in your project with {$include CompileDateTime.inc} directive
//
const
_CompileDateTime = 38945.0731506713
_CompileTimeStr = 1:45:20
_CompileDateStr = 16.08.2006
_CompileDateTimeStr = 16.08.2006 1:45:20
Для их использования достаточно включить этот файл в нужное место программы при помощи директивы компилятора {$include} и использовать эти константы по назначению.
В общем, всё просто :)
Германн (2006-08-16 00:41:00) [11]Не. Ещё главнее - что есть "время компилляции"? Дата/время или длительность? :-)
Virgo_Style (2006-08-15 22:55:00) [12]и главное, зачем?