728x90
반응형

Development Tip 17

C# 고정밀도 타이머

안녕하세요, MoonLight입니다.​고해상도 타이머 APIC#뿐만 아니라, Win32 API를 사용하는 Windows Application을 작성할 때 가끔씩 ms(밀리세컨드)보다 더 작은 us(마이크로세컨드)/ns(나노세컨드) 단위의 시간을 측정해야 하는 경우가 간혹 생깁니다.​저는 최근에 SSD의 정밀한 성능 측정을 수행하는 Application을 제작해야 하는 경우가 생겨서 이런 필요가 생겼습니다.​고정밀도 타이머를 사용하기 위한 API는 QueryPerformanceCounter()를 사용합니다.  https://learn.microsoft.com/ko-kr/windows/win32/api/profileapi/nf-profileapi-queryperformancecounter ​ QueryPer..

Development Tip 2024.05.14

Transformer #3 - Overall

안녕하세요, MoonLight입니다.​이번 Post에서는 Transformer의 전체 구조를 개괄적으로 알아보도록 하겠습니다.​​​ ​​Transformer의 전체 구조의 위와 같습니다. 왼쪽이 Encoder의 구조이고, 오른쪽이 Decoder입니다.​​0. Encoder​먼저 Encoder의 구조에 대해서 간략하게 살펴보겠습니다.​​​0.0. Tokenizer​가장 아래쪽에 Inputs이 있습니다. Transformer에서 Input은 단어들로 이루어진 문장이 되겠죠.​이 그림에서는 생략되어 있는데, Input Embedding Layer에 문장 전체가 들어갈 수는 없기 때문에 그전에 tokenizer를 이용하여, 문장들을 Token 단위로 나눕니다.​Transformer에서는 주로 WordPiece ..

Development Tip 2024.04.29

MSBuild 오류 MSB8041 - 이 프로젝트에는 MFC 라이브러리가 필요합니다.

안녕하세요, MoonLight입니다.​이번 Post에서는 Visual Studio 2019에서 MFC Project를 Build하는 방법에 대해서 알아보겠습니다.​'요즘 세상에 아직 MFC를 사용할 일이 있을까?' 라는 생각을 하실지도 모르겠으나,​저같은 경우에는 직접 MFC를 이용해서 개발하는 것이 아니고, 오래전에 개발된 Project를 살펴볼 일이 있어서 ​Visual Studio 2019에서 Build하려고 했더니, "MSBuild 오류 MSB8041 - 이 프로젝트에는 MFC 라이브러리가 필요합니다."라는 Error를 내면서 Build가 되지 않네요.​해결 방법은 간단합니다. MFC를 설치하면 됩니다. ​Visual Studio 2019는 기본적으로 MFC가 설치되지 않습니다. Visual St..

Development Tip 2024.04.26

C# - Font Load하여 사용하기

안녕하세요, MoonLight입니다. ​ 이번 Post에서는 임의의 Font를 Application에 Load하여 사용하는 방법에 대해서 알아보도록 하겠습니다. ​ 검색을 통해서 무료로 사용가능하고 예쁜 Font를 하나 찾았습니다. ​ 프리텐다드(Pretendard)라는 Font인데, 깔끔하고 괜찮더라구요. ​ 이 예제에서는 이 Font를 자신의 Application에 Load하여 사용하는 방법을 알아보도록 하겠습니다. ​ 소개 https://noonnu.cc/font_page/694​ 눈누 프리텐다드 - 길형진 (orioncactus) noonnu.cc 다운로드 https://cactus.tistory.com/306​ ​ Pretendard Pretendard 프리텐다드 Pretendard 프리텐다드 ..

Development Tip 2024.03.29

C# - System.InvalidOperationException 크로스 스레드 작업이 잘못되었습니다

안녕하세요, MoonLight입니다. ​ C#에서 평소처럼 Control에 접근해서 이런저런 작업을 하려고 하는데, 아래와 같은 Error를 만나는 경우가 있습니다. ​ ​ ​ 비교적 설명이 자세히 나와 있는데요, Control이 만들어진 Thread가 아닌, 다른 Thread에서 해당 Control에 Access하려고 하는 경우에 ​ 이런 Error가 발생합니다. ​ 저 같은 경우엔 UI를 만든 Main Thread가 아닌, 작업 Thread에서 Main Thread UI를 변경하고자 할 때 이런 Error를 만났습니다. ​ 해결 방법은 Simple합니다. delegate를 사용하면 됩니다. ​ delegate는 주로 Windows Forms Application에서 사용되는데, UI를 다루는 과정에서..

Development Tip 2024.03.27

C# Thread 함수에 Parameter 전달하기

안녕하세요, MoonLight입니다. ​ 오늘은 C#에서 Thread 함수를 만들어서 사용할 때, Parameter를 넘기는 방법에 대해서 알아보도록 하겠습니다. ​ 언뜻 떠오르는 방법은 Class 변수를 전역 변수처럼 사용해서 사용하는 방법이 있을 수 있겠습니다. ​ 하지만, 뭔가 세련되지 못한 듯한 느낌이 오죠? ​ 제가 오늘 소개해 드릴 방법은 ParameterizedThreadStart Class를 사용하는 방법입니다. ​ ParameterizedThreadStart Class 사용법을 예제 Code로 한 번 알아보도록 하겠습니다. ​ using System; using System.Collections.Generic; using System.Linq; using System.Text; using..

Development Tip 2024.03.02

C# - "System.InvalidOperationException: 컬렉션이 수정되었습니다" 오류

안녕하세요, MoonLight입니다. ​ C#에서 Multi Thread or Task 작업 중에 'System.InvalidOperationException: 컬렉션이 수정되었습니다. 열거 작업이 실행되지 않을 수도 있습니다.'라는 Exception을 보신적이 있을 것입니다. ​ Multi Thread 혹은 Multi Task을 사용하다 보면 여러 Thread or Task에서 공통으로 사용해야 하는 값들이 있을 것입니다. ​ 흔히 이것을 공유 자원이라고 하고 공유 자원을 여러 Thread에서 잘 사용할 수 있도록 조절하는 것을 동기화라고 하죠. ​ 결론적으로, 동기화 문제를 해결하는 방법은 하나의 Thread에서 공유 자원을 사용하고 있으면 다른 Thread들에서는 사용하지 못하게 막는 것입니다. ​..

Development Tip 2024.02.24

C# listbox를 자동 스크롤되도록 만들기

안녕하세요, MoonLight입니다. ​ 이번 Post에서는 C#으로 Winform Application을 만들다 보면, Log나 Message를 연속으로 출력해 주는 Control이 필요한 경우가 가끔 생기기도 합니다. ​ 이런 기능을 제공하는 Control이 있는지 Visual Studio 찾아보니 기본 도구 상자에는 이와 같은 기능을 제공해 주는 Control은 없는 것 같아서 ​ ListBox를 이용해서 한 번 만들어 보려고 합니다. ​ 최종적으로 구현하려는 기능 다음과 같습니다. - Text 형식의 Log Message를 Control에 추가가능 - Log Message를 추가하면 자동으로 Scroll되고, 최종적으로 추가한 Log Message가 가장 하단에 보이도록 구성 ​ 우선 아래와 같이..

Development Tip 2024.02.15

C# UI 작업하면서 Delay 주기

안녕하세요, MoonLight입니다. ​ 오늘은 C#에서 Thread 작업 중에 UI가 먹통이 되지 않으면서 Delay를 줄 수 있는 방법을 2가지 소개해 드릴까 합니다. ​ Delay를 주는 함수로써 Thread.Sleep()이 대표적인데, 이 녀석은 Delay 동안 Blocking된다는 치명적인 단점이 있습니다. ​ Blocking되버리면, UI가 먹통이 되버리기 때문에 사용자의 짜증을 유발할 수가 있습니다. ​ 이런 상황은 절대로 일어나선 안되겠죠. ​ ​ 이를 방지할 수 있는 방법으로 제가 주로 사용하는 방법은 2가지가 있는데요, 하나씩 알아보겠습니다. ​ ​ 1. Event 처리하면서 Delay하기 아래 Code와 같은 Delay함수를 만듭니다. ​ 정해진 시간만큼 Delay하고, System...

Development Tip 2024.02.14

C# - Application을 관리자권한으로 실행하기

안녕하세요, MoonLight입니다. ​ 이번 Post에서는 C#으로 응용 프로그램을 개발할 때 관리자 권한으로 실행되도록 하는 방법을 소개해 드리겠습니다. ​ C# Application을 만들다 보면 간혹 내가 만든 Application이 관리자 권한으로 실행되도록 해야 하는 경우가 있습니다. ​ 예를 들면, 하드웨어 관련 작업을 수행을 한다거나 기타 여러가지의 사유로 이런 경우가 생길 수 있습니다. ​ ​ ​ 저는 Application 속성(manifest)를 수정하는 방법을 소개해 드릴 예정이며, 어떻게 하면 되는지 자세히 알아보도록 하겠습니다. ​ ​ ​ 1) 먼저, 작업하고 계신 Application 속성으로 갑니다. ​ ​ ​ ​ ​ ​ ​ ​ ​ 2) '보안' 탭으로 이동하신 후에 오른쪽에 ..

Development Tip 2024.02.05
728x90
반응형