C언어 study_시간 함수,구조

민성철·2022년 11월 22일
0

nadocoding_study_C

목록 보기
14/17

시간 함수

gettimeofday()

학습단 프로젝트 중 프로그램 시작 시간을 기준으로 총 경과 시간, 최근 경과 시간 등을 이용한 게임을 만들어 보는 시간이 있었습니다.
책에 써져 있는 문단을 보고도 작성해보고, 책에 나와있는 코드를 각색해서도 작성해 보았으나, 원하는 결괏값이 전혀 나오지 않았습니다.

때문에 이를 해결하고자 구글링 및 질문의 글을 작성하였고, 이때 알게 된 것이 구문 위치에 따라서 연산이 천차만별로 달라진다는 것시간 함수 입니다.

구문 위치에 따라 달라지는 것은 어찌 보면 프로그램을 연산할 때, 위에서 부터 차례대로 되기 때문에 당연한 결과이고, 시간 함수의 경우에는 이번에 구글링 하며 처음 알게 된 함수입니다.

C는 소스 로직 중 특정 구간의 수행 시간 차이를 계산하기 위해 마이크로 단위의 시간 함수 gettimeofday()를 지원하고, 이번 프로젝트 프로그램의 꼭 필요한 함수였습니다.

  • gettimeofday 함수 구조
#include <sys/time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);

timezone은 잘 사용되지 않으며, timeval의 구조는 다음과 같습니다.
반환되는 값을 1970 - 01 - 01 // 00:00 부터 함수가 호출된 시간까지의 ms(micro secend) 값 입니다.

struct timeval {
	time_t		tv_sec;
    suseconds_t tv_usec;
    }

time_t는 초, suseconds_t는 마이크로 초를 저장합니다.

시간 함수(gettimeofday) 사용법은 아래 코드와 같습니다.

#include <stdio.h>
#include <sys/time.h>

int main(void) {
	struct timeval startTime, endTime;  // 시작과 끝을 선언
    double diffTime;                    // 시간 차이를 나타내는 변수 선언
    
    gettimeofday(&startTime, NULL);
     // 특정 작업 수행
    sleep(1);
    gettimeofday(&endTime, NULL);
    diffTime = (endTime.tv_sec - startTime.tv_sec) + ((endTime.tv_usec - startTime.tv_usec) / CLOCKS_PER_SEC); // CLOCKS_PER_SEC 은 10000000 Clock_ticks를 1초로 반환해 주는 매크로
    printf("%f s\n", diffTime);
    return 0;
}

output

1.000000 s

[출처 : https://mozi.tistory.com/127]

  • 위에 main() 함수 안에 선언된 "struct"은 여러 관련 변수를 한 곳으로 그룹화하는 방법입니다.
    구조의 각 변수는 구조의 멤버로 알려져 있으며, 배열(array)과 다르게 구조(struct)는 다양한 데이터 유형(int, float, char 등)을 포함할 수 있습니다.

이해를 돋기 위해 예시 코드는 아래와 같습니다.

#include <stdio.h>


strcut MyStructure {           //structure 정의 (structure는 정의를 마무리 하는 중괄호 뒤에 세미클론을 붙여줍니다.)
	int myNum;
    char myLetter;
};

int main(void) {
	struct MyStructure s1;     // structure 선언
    
    s1.myNum = 13;             // 선언한 MyStructure 맴버에 값 할당
    s1.myLetter = 'B';         // 선언한 MyStructure 맴버에 값 할당
    
    printf("My number : %d\n", s1.myNum);
    printf("My letter : %c\n", s1.myLetter);
    return 0;
}

output

My number : 13
My letter : B

[출처 : https://www.w3schools.com/c/c_structs.php]

구조체(struct)의 경우, 다음 학습시간에 좀 더 알아보고 작성해보겠습니다.

profile
ENTJ-A

0개의 댓글