Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

C/C++ - SYSTEMTIME 값 기준으로 특정 시간이 지났는지를 판단하는 함수

C#으로 구현하면 이런 식인데,

static void Main(string[] args)
{
    DateTime old = DateTime.Now;
    Thread.Sleep(1000);

    if ((DateTime.Now - old).TotalMilliseconds > 1000)
    {
        Console.Write("Hello");
    }

    Console.WriteLine("World!");
}

Windows 환경의 C/C++에서 SYSTEMTIME으로 저 작업을 하려니 코드가 좀 복잡해지는데, ^^ 제 경우에는 stackoverflow의 어느 코드인가를 참고해서 다음과 같이 만들어봤습니다.

bool IsElapsedTime(SYSTEMTIME* oldTime, SYSTEMTIME* currentTime, ULONGLONG milliSeconds)
{
    union TimeUnit {
        ULARGE_INTEGER li;
        FILETIME       ft;
    };

    TimeUnit oldUnit, newUnit;

    SystemTimeToFileTime(oldTime, &oldUnit.ft);
    SystemTimeToFileTime(currentTime, &newUnit.ft);

    // Add in the seconds
    oldUnit.li.QuadPart += (milliSeconds * 10000); // 1 milli == 1000000 nano
                                                   // 1 milli == 10000 * 100 nano

    return oldUnit.li.QuadPart <= newUnit.li.QuadPart;
}

SYSTEMTIME을 FileTime으로 바꾸면,

SYSTEMTIME structure
; https://learn.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-systemtime

FILETIME structure
; https://learn.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-filetime

QuadPart에 1이 있는 경우 그 값이 100 나노초가 되므로 밀리 초를 나타내기 위해 10,000을 곱하는 식으로 해결하면 됩니다.

어쨌든 사용법은, 요런 식으로 할 수 있습니다.

if (DateTimeExtension::IsElapsedTime(&oldTime, &currentTime, 500) == true)
{
    // 500ms 지난 후 해야 할 작업 수행
}




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 7/7/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 16  17  [18]  19  20  21  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13539정성태1/26/202410428개발 환경 구성: 703. Visual Studio - launchSettings.json을 이용한 HTTP/HTTPS 포트 바인딩
13538정성태1/25/202411252닷넷: 2211. C# - NonGC(FOH) 영역에 .NET 개체를 생성파일 다운로드1
13537정성태1/24/202412674닷넷: 2210. C# - Native 메모리에 .NET 개체를 생성파일 다운로드1
13536정성태1/23/202411987닷넷: 2209. .NET 8 - NonGC Heap / FOH (Frozen Object Heap) [1]
13535정성태1/22/202413215닷넷: 2208. C# - GCHandle 구조체의 메모리 분석
13534정성태1/21/202411493닷넷: 2207. C# - SQL Server DB를 bacpac으로 Export/Import파일 다운로드1
13533정성태1/18/202411531닷넷: 2206. C# - TCP KeepAlive의 서버 측 구현파일 다운로드1
13532정성태1/17/202411746닷넷: 2205. C# - SuperSimpleTcp 사용 시 주의할 점파일 다운로드1
13531정성태1/16/202412085닷넷: 2204. C# - TCP KeepAlive에 새로 추가된 Retry 옵션파일 다운로드1
13530정성태1/15/202411711닷넷: 2203. C# - Python과의 AES 암호화 연동파일 다운로드1
13529정성태1/15/202411555닷넷: 2202. C# - PublishAot의 glibc에 대한 정적 링킹하는 방법
13528정성태1/14/202412288Linux: 68. busybox 컨테이너에서 실행 가능한 C++, Go 프로그램 빌드
13527정성태1/14/202412640오류 유형: 892. Visual Studio - Failed to launch debug adapter. Additional information may be available in the output window.
13526정성태1/14/202412942닷넷: 2201. C# - Facebook 연동 / 사용자 탈퇴 처리 방법
13525정성태1/13/202411577오류 유형: 891. Visual Studio - Web Application을 실행하지 못하는 IISExpress
13524정성태1/12/202411005오류 유형: 890. 한국투자증권 KIS Developers OpenAPI - GW라우팅 중 오류가 발생했습니다.
13523정성태1/12/202412116오류 유형: 889. Visual Studio - error : A project with that name is already opened in the solution.
13522정성태1/11/202413054닷넷: 2200. C# - HttpClient.PostAsJsonAsync 호출 시 "Transfer-Encoding: chunked" 대신 "Content-Length" 헤더 처리
13521정성태1/11/202411606닷넷: 2199. C# - 한국투자증권 KIS Developers OpenAPI의 WebSocket Ping, Pong 처리
13520정성태1/10/202411580오류 유형: 888. C# - Unable to resolve service for type 'Microsoft.Extensions.ObjectPool.ObjectPool`....' [1]
13519정성태1/10/202410907닷넷: 2198. C# - Reflection을 이용한 ClientWebSocket의 Ping 호출파일 다운로드1
13518정성태1/9/202412174닷넷: 2197. C# - ClientWebSocket의 Ping, Pong 처리
13517정성태1/8/202410704스크립트: 63. Python - 공개 패키지를 이용한 위성 이미지 생성 (pystac_client, odc.stac)
13516정성태1/7/202411907닷넷: 2196. IIS - AppPool의 "Disable Overlapped Recycle" 옵션의 부작용
13515정성태1/6/202410869닷넷: 2195. async 메서드 내에서 C# 7의 discard 구문 활용 사례 [1]
13514정성태1/5/202410808개발 환경 구성: 702. IIS - AppPool의 "Disable Overlapped Recycle" 옵션
... 16  17  [18]  19  20  21  22  23  24  25  26  27  28  29  30  ...