시간(밀리초 단위) C
다음 코드 사용:
#include<stdio.h>
#include<time.h>
int main()
{
clock_t start, stop;
int i;
start = clock();
for(i=0; i<2000;i++)
{
printf("%d", (i*1)+(1^4));
}
printf("\n\n");
stop = clock();
//(double)(stop - start) / CLOCKS_PER_SEC
printf("%6.3f", start);
printf("\n\n%6.3f", stop);
return 0;
}
다음과 같은 출력이 표시됩니다.
56789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004 2.169 2.169
시작 시간과 중지 시간이 동일합니다.프로그램 실행 완료에 시간이 거의 걸리지 않는다는 뜻인가요?
1.이 false일 경우 적어도 (.)을 초과하는 자릿수는 달라야 합니다.이 값은 여기서 발생하지 않습니다.제 논리가 맞습니까?
주의: 실행에 걸리는 시간과 위의 코드를 계산해야 합니다.
네, 이 프로그램은 1밀리초 미만을 소비하고 있습니다.하세요.timeval
.
예:
#include <sys/time.h>
struct timeval stop, start;
gettimeofday(&start, NULL);
//do stuff
gettimeofday(&stop, NULL);
printf("took %lu us\n", (stop.tv_sec - start.tv_sec) * 1000000 + stop.tv_usec - start.tv_usec);
그런 음음음음음음음음음음음음마마마rence마 the you )의할 수 있습니다.stop.tv_usec - start.tv_usec
. 의 시간(「」1」로서)에만해 주세요tv_usec
루프가 발생합니다)., '어울리다'를 조합하여 합니다.tv_sec
★★★★★★★★★★★★★★★★★」tv_usec
.
2016-08-19 편집
시스템에 대한 보다 적절한 접근법clock_gettime
을 사용하다
struct timespec start, end;
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
//do stuff
clock_gettime(CLOCK_MONOTONIC_RAW, &end);
uint64_t delta_us = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_nsec - start.tv_nsec) / 1000;
타임 스탬프를 100만 초 단위로 취득하기 위해서 쓰는 글입니다.
#include<sys/time.h>
long long timeInMilliseconds(void) {
struct timeval tv;
gettimeofday(&tv,NULL);
return (((long long)tv.tv_sec)*1000)+(tv.tv_usec/1000);
}
하시면 됩니다.gettimeofday()
★★★★★★★★★★★★★★★와 함께timedifference_msec()
아래 함수를 사용하여 두 샘플 사이에 경과한 밀리초 수를 계산합니다.
#include <sys/time.h>
#include <stdio.h>
float timedifference_msec(struct timeval t0, struct timeval t1)
{
return (t1.tv_sec - t0.tv_sec) * 1000.0f + (t1.tv_usec - t0.tv_usec) / 1000.0f;
}
int main(void)
{
struct timeval t0;
struct timeval t1;
float elapsed;
gettimeofday(&t0, 0);
/* ... YOUR CODE HERE ... */
gettimeofday(&t1, 0);
elapsed = timedifference_msec(t0, t1);
printf("Code executed in %f milliseconds.\n", elapsed);
return 0;
}
: 「 」를 사용하는 다음과 같습니다.gettimeofday()
, 왜냐하면 마이크로초의 차이에는 관심이 때문입니다.tv_usec
는 1초마다 0으로 반환되며 각 샘플이 어느 시점에서 취득되는지 미리 알 수 없습니다.
이 코드 스니펫은 시간을 초, 밀리초 및 마이크로초로 표시하는 데 사용할 수 있습니다.
#include <sys/time.h>
struct timeval start, stop;
double secs = 0;
gettimeofday(&start, NULL);
// Do stuff here
gettimeofday(&stop, NULL);
secs = (double)(stop.tv_usec - start.tv_usec) / 1000000 + (double)(stop.tv_sec - start.tv_sec);
printf("time taken %f\n",secs);
C 는 C를 제공합니다.timespec_get
시스템이 지원하는 경우 최대 나노초의 정밀도를 알 수 있습니다.그러나, 그것을 부르는 것은 구조를 수반하기 때문에 조금 더 많은 노력이 필요하다.여기에서는 구조를 단순한 64비트 정수로 변환하여 밀리초 단위로 시간을 얻을 수 있는 기능이 있습니다.
#include <stdio.h>
#include <inttypes.h>
#include <time.h>
int64_t millis()
{
struct timespec now;
timespec_get(&now, TIME_UTC);
return ((int64_t) now.tv_sec) * 1000 + ((int64_t) now.tv_nsec) / 1000000;
}
int main(void)
{
printf("Unix timestamp with millisecond precision: %" PRId64 "\n", millis());
}
★★★★★★★★★★★★★★★와 달리clock
하여 Unix의 기능에 소비된 예: Unix의 경우).sleep
.
표시되는 결과에 영향을 줄 수 있는 몇 가지 사항이 있습니다.
- 하고 있다
clock_t
부동소수점 타입은 아닌 것 같아요 - 하고 있을지도
1^4
1과 4의 비트 단위 XOR 계산 이외의 작업을 수행합니다.즉, 5입니다. - XOR은 상수로 되어 있기 때문에 컴파일러에 의해 접혀져 있을 가능성이 높기 때문에 실행 시 많은 작업이 추가되지 않습니다.
- 출력은 버퍼링되기 때문에(문자열을 포맷하여 메모리에 쓰는 것 뿐) 매우 빠르게 완료됩니다.
머신의 속도를 특정하고 있는 것은 아닙니다만, 최신의 하드웨어로 고속으로 동작하는 것도 무리가 아닙니다.
콜이 있는 경우는, 다음에 콜을 추가해 주세요.sleep()
시작/중지 스냅샷 사이에 있습니다.주의:sleep()
단, 표준 C가 아닌 POSIX입니다.
맨 클럭에서:
clock() 함수는 프로그램에서 사용되는 프로세서 시간의 근사치를 반환합니다.
따라서 밀리초로 취급해야 한다는 지시는 없습니다.일부 표준에는 정확한 값이 필요합니다.CLOCKS_PER_SEC
신뢰할 수 있지만 권장하지 않습니다.두 번째는 @unwind가 말했듯이 플로트/더블이 아닙니다.인간의 시대에 따르면 그것은 인트일 것이다.또, 다음의 점에 주의해 주세요.
이 함수는 약 72분마다 동일한 값을 반환합니다.
또한 운이 나쁘면 0부터 카운트를 시작하려는 순간에 도달하여 음수 또는 큰 값을 얻을 수 있습니다(결과를 부호 있는 값으로 저장하느냐, 부호 없는 값으로 저장하느냐에 따라 다름).
이것은, 다음과 같습니다.
printf("\n\n%6.3f", stop);
int를 플로트로 취급하는 것은 정의되어 있지 않은 동작으로 인쇄 가비지가 되는 경우가 대부분입니다(그리고 이것이 문제의 원인이라고 생각합니다).항상 다음 작업을 수행할 수 있는지 확인하려면:
printf("\n\n%6.3f", (double) stop);
인쇄하는 게 낫긴 하지만long long int
처음에:
printf("\n\n%lldf", (long long int) stop);
최신 프로세서는 실행 시간을 등록하기에는 너무 빠릅니다.따라서 0이 반환될 수 있습니다.이 경우 시작 시간과 종료 시간이 너무 작기 때문에 라운드 후 두 시간이 동일합니다.
언급URL : https://stackoverflow.com/questions/10192903/time-in-milliseconds-in-c
'programing' 카테고리의 다른 글
Python 함수 전역 변수? (0) | 2022.09.25 |
---|---|
Guzzle을 사용한HTTP 기본 인증은 어떻게 하나요? (0) | 2022.09.25 |
문자열에서 LocalDate로 (0) | 2022.09.14 |
다른 컴포넌트의 Vue 단일 컴포넌트에서 데이터를 가져오시겠습니까? (0) | 2022.09.13 |
JavaScript에서 문자열을 여러 구분자로 분할하려면 어떻게 해야 합니까? (0) | 2022.09.13 |