Как ко времени сценарий в DOS?

Некоторые общие руководящие принципы:

  • Разделяют на пары Ваши интерфейсы с реализациями. Если Вы имеете foo.cxx, все определенное там должно быть объявлено в foo.h.
  • Гарантируют что каждый заголовочный файл #includes все другие необходимые заголовки или предописания, необходимые для независимой компиляции.
  • Сопротивляются искушению создать "все" заголовок. Они всегда - проблема в будущем.
  • Помещенный ряд связанного (и взаимозависимый) функциональность в единственный файл. Java и другие среды поощряют one-class-per-file. С C++ Вы часто хотите один набор [1 117] классы на файл. Это зависит от структуры Вашего кода.
  • Предпочитают предописание [более чем 112] с, когда это возможно. Это позволяет Вам повреждать циклические зависимости от заголовка. По существу, для циклических зависимостей через отдельные файлы, Вы хотите граф зависимостей файла, который выглядит примерно так:
    • A.cxx требует A.h, и B.h
    • B.cxx требует A.h, и B.h
    • A.h требует B.h
    • B.h, независимо (и вперед - объявляет классы, определенные в [1 112])

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

  • При необходимости, используйте понятие "частных заголовков". Таким образом, заголовочные файлы, которые требуются несколькими исходными файлами, но никогда не требуются открытым интерфейсом. Это могло быть файлом с общими подставляемыми функциями, макросами или внутренними константами.
  • Разделяют Ваш открытый интерфейс от Вашей частной реализации на уровне файловой системы. Я склонен использовать include/ и src/ подкаталоги в моем C или проектах C++, где include/ имеет все мои общедоступные заголовки, и src/ имеет все мои источники. и частные заголовки.

я рекомендовал бы найти копию книги John Lakos Крупномасштабной Разработкой программного обеспечения C++ . Это - довольно значительная книга, но если Вы просто будете скользить посредством некоторых его обсуждений физической архитектуры, Вы изучите много.

5
задан 22 September 2009 в 19:45
поделиться

4 ответа

вы можете поместить это в начало и конец вашего пакета:

echo %time%
5
ответ дан 18 December 2019 в 13:16
поделиться

you can use timeit.exe from the Windows Server 2003 Resource Kit . You also get a crapload of other useful tools and Unix command ports.

C:\Documents and Settings\Rob>timeit sleep 3

Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        2:40 pm, Thursday, December 10 2009
Elapsed Time:     0:00:03.296
Process Time:     0:00:00.015
System Calls:     7576
Context Switches: 1974
Page Faults:      1072
Bytes Read:       6172
Bytes Written:    11086
Bytes Other:      144432
5
ответ дан 18 December 2019 в 13:16
поделиться

If you don't mind using a third party EXE for help, timer.exe from Gammadyne is very useful.

setlocal ENABLEEXTENSIONS
FOR /F %%G IN ('timer') DO SET start_time=%%G

@rem Do your work Here
call userscript.bat %*

timer %start_time% "Total time"
endlocal
0
ответ дан 18 December 2019 в 13:16
поделиться

This is a DOS batch script that will compute the time difference for you rather than just doing echo %time%.

The following code will work fine as long as your "timed user section" doesn't take more than 24 hours to run. Please be forgiving or give me suggestions, it's a work in progress that I spent about an hour on.

Replace "PAUSE" with the call to your script to time your own code.

DOS BAT FILE FOLLOWS:

Note: was edited to fix issue with leading zeros being octal rather than decimal.

Note: was edited to handle running over "midnight" hour wraparound and to put leading zeros in output.

@echo off
@rem --------------------------------------------
setlocal ENABLEEXTENSIONS

set start_time=%time%
echo Beginning at: %start_time%
echo Running Timed Batch File
echo.

@rem echo %*  <-- Extension for all args -- easier than following line
@rem echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 ... ...

@rem DO YOUR WORK HERE -- see "call" / PAUSE is here to "fake" work
@rem call userscript.bat %*
PAUSE

set stop_time=%time%
echo.
echo Timed Batch File Completed
echo Start time: %start_time%
echo Stop time : %stop_time%


set TEMPRESULT=%start_time:~0,2%
call:FN_REMOVELEADINGZEROS
set start_hour=%TEMPRESULT%
@rem
set TEMPRESULT=%start_time:~3,2%
call:FN_REMOVELEADINGZEROS
set start_min=%TEMPRESULT%
@rem
set TEMPRESULT=%start_time:~6,2%
call:FN_REMOVELEADINGZEROS
set start_sec=%TEMPRESULT%
@rem
set TEMPRESULT=%start_time:~9,2%
call:FN_REMOVELEADINGZEROS
set start_hundredths=%TEMPRESULT%

set TEMPRESULT=%stop_time:~0,2%
call:FN_REMOVELEADINGZEROS
set stop_hour=%TEMPRESULT%
@rem
set TEMPRESULT=%stop_time:~3,2%
call:FN_REMOVELEADINGZEROS
set stop_min=%TEMPRESULT%
@rem
set TEMPRESULT=%stop_time:~6,2%
call:FN_REMOVELEADINGZEROS
set stop_sec=%TEMPRESULT%
@rem
set TEMPRESULT=%stop_time:~9,2%
call:FN_REMOVELEADINGZEROS
set stop_hundredths=%TEMPRESULT%

set /A start_total=(((((%start_hour%*60)+%start_min%)*60)+%start_sec%)*100)+%start_hundredths%
set /A stop_total=(((((%stop_hour%*60)+%stop_min%)*60)+%stop_sec%)*100)+%stop_hundredths%

set /A total_time=%stop_total% - %start_total%

set /A total_hundredths=%total_time% %% 100
set total_hundredths=00%total_hundredths%
set total_hundredths=%total_hundredths:~-2%
set /A total_time=%total_time% / 100

set /A total_sec="%total_time% %% 60"
set total_sec=00%total_sec%
set total_sec=%total_sec:~-2%
set /A total_time=%total_time% / 60

set /A total_min="%total_time% %% 60"
set total_min=00%total_min%
set total_min=%total_min:~-2%
set /A total_time=%total_time% / 60

set /A total_hour="%total_time% %% 60"
@rem Handle if it wrapped around over midnight
if "%total_hour:~0,1%"=="-" set /A total_hour=%total_hour% + 24

echo Total time: %total_hour%:%total_min%:%total_sec%.%total_hundredths%

@rem --------------------------------------------
@rem Exit the BAT Program
endlocal
goto END

@rem --------------------------------------------
@rem FN_REMOVELEADINGZEROS function
@rem  Used to remove leading zeros from Decimal
@rem  numbers so they are not treated as Octal.
:FN_REMOVELEADINGZEROS
if "%TEMPRESULT%"=="0" goto END
if "%TEMPRESULT:~0,1%" NEQ "0" goto END
set TEMPRESULT=%TEMPRESULT:~1%
goto FN_REMOVELEADINGZEROS

@rem --------------------------------------------
@rem BAT PROGRAM / FUNCTION FILE EXIT
:END
4
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: