“C++” 태그의 글
“C++” 태그가 붙은 글 19건을 최신순으로 정리했습니다.
-
Time Travel Debugging ── 장기 가동에서 재현되지 않는 결함을 「녹화」해서 되감기
한 달에 한 번만 나오는 결함은 크래시 덤프로는 결과밖에 찍히지 않습니다. WinDbg의 Time Travel Debugging(TTD)으로 실행을 녹화해 되감는 방법을 TTD.exe의 녹화 설계, 링 버퍼, TTD.Calls 쿼리, 덤프와의 역할 분담까지 설명합니다.
-
인수는 왜 깨지는가 ── Windows 명령줄 인수의 규칙
Windows에는 인수의 배열이 존재하지 않으며, CreateProcess에 전달되는 것은 한 줄의 문자열이고 분할은 받는 쪽이 합니다. CommandLineToArgvW·CRT·.NET의 분할 규칙과 .NET의 ArgumentList, C++에서의 올바른 조립 방법을 설명합니다.
-
부모가 죽은 뒤에 무엇이 남는가 — Job Object로 자식 프로세스를 기르기
UI를 강제로 종료해도 SDK의 헬퍼가 남아 카메라나 COM 포트를 붙잡고 놓지 않는 이유는 무엇인가. Job Object로 프로세스 트리를 하나의 단위로 만들고, KillOnJobClose와 완료 포트로 자식 프로세스의 수명을 설계하는 방법을 계측 애플리케이션의 시선에서 설명합니다.
-
Win32 스레드 풀 API ── CreateThreadpoolWork로 「스레드를 만들지 않는」 병렬 처리
네이티브 코드에서 CreateThread를 마구 늘리고 있지는 않습니까. Vista에서 새로 설계된 Win32 스레드 풀 API의 work, timer, wait, io 네 가지 객체와 클린업 그룹, 콜백에서 해서는 안 되는 일까지 1차 자료를 근거로 설명합니다.
-
Named Pipe 실무 ── Windows 프로세스 간 통신의 정석을 설계부터 보안까지
Windows 프로세스 간 통신의 정석인 Named Pipe를 실무 관점에서 설명합니다. 바이트/메시지 모드의 선택, 여러 클라이언트를 처리하는 서버 설계, ACL과 impersonation 보안, .NET의 NamedPipeStream까지 일차 자료를 근거로 정리합니다.
-
DllMain과 로더 락 ── 「DLL 초기화에서는 아무것도 하지 말라」는 말의 진짜 이유
DllMain에서 LoadLibrary나 스레드 동기화를 해서는 안 되는 이유는 무엇인가. 모든 DLL 알림을 직렬화하는 로더 락의 구조부터, 데드락이 성립하는 전형적인 시나리오, 지연 초기화 같은 올바른 설계, hang 조사 절차까지를 1차 정보로 설명합니다.
-
spurious wakeup ── 조건 변수가 「알림 없이 깨어나는」 이유와 Windows에서 올바르게 기다리는 방법
조건 변수의 wait는 알림이 오지 않아도 깨어날 수 있습니다(spurious wakeup). 사양이 이를 허용하는 이유를 Windows 구현에서 밝히고, while과 predicate로 쓰는 올바른 대기 방법을 Win32·C++·C# 코드로 보입니다.
-
멀티스레드 실무 베스트 프랙티스 C++ 편 ── RAII와 jthread로 사고를 구조적으로 없애기
C++ 멀티스레드는 data race가 곧 undefined behavior가 되는 세계입니다. std::thread 소멸자의 함정, jthread와 stop_token으로 멈추는 설계, scoped_lock의 deadlock 회피, atomic의 자리, Win32 동기화 API와...
-
DLL・COM 인터페이스의 하위 호환성 ── 어떤 변경이 호출 측을 깨뜨리는지의 판단표
DLL이나 COM 컴포넌트의 어떤 변경이 호출 측을 깨뜨리는지. 바이너리 호환・소스 호환・동작 호환의 3계층을 정리하고, 변경 내용별 판단표, COM 인터페이스 불변의 철칙, semver 운용까지를 실무 가이드로 정리합니다.
-
Windows의 MFC란 무엇인가 ── 기존 자산을 유지보수하기 위한 기초 지식
Microsoft Foundation Classes(MFC)의 개요, Win32와의 관계, 애플리케이션 구조, 메시지 맵, Document/View, DDX/DDV, 유지보수 시 주의점을 정리합니다.
-
Windows 앱에서 자식 프로세스를 안전하게 다루는 체크리스트
Windows 앱에서 자식 프로세스를 안전하게 다루려면, 시작 API보다 프로세스 트리의 소유권과 종료 절차 설계가 중요합니다. Job Object, 종료 전파, 표준 입출력, watchdog을 정리합니다.
-
Windows 앱의 1파일 배포 - 싱글 바이너리와 OS 의존의 한계
Windows 앱을 1 EXE로 모으고 싶을 때, 배포물을 1개로 만드는 것과 OS 의존을 없애는 것의 차이를 .NET, C++, WebView2, WinUI, 서비스, 드라이버까지 정리합니다.
-
공유 메모리의 함정과 실무 베스트 프랙티스
공유 메모리를 실무에서 쓸 때의 함정과, 동기, 가시성, 수명, ABI, 권한까지 포함해 사고율을 낮추는 설계를 정리합니다.
-
C#/C++/Java/Go 실행 속도를 공정하게 비교하는 방법
C#, C++, Java, Go의 실행 속도를 공정하게 비교하는 방법을 측정 설계, warm-up, 환경 고정, 통계 해석, 구체적인 벤치 항목까지 정리합니다.
-
Media Foundation으로 MP4에 이미지와 텍스트를 오버레이하는 방법
Media Foundation으로 MP4 각 프레임에 이미지와 텍스트를 합성해 새 MP4를 만드는 생각을, Source Reader, 그리기, 색 변환, Sink Writer의 역할 분담과 1파일 완결 C++ 샘플로 정리합니다.
-
Media Foundation에서 YUV를 RGB로 변환하는 방법
Media Foundation에서 YUV 프레임을 RGB로 변환하는 방법을 Source Reader의 자동 변환과 NV12/YUY2 직접 변환, stride, 색공간 관점에서 정리합니다.
-
Media Foundation으로 MP4의 지정 시각에서 정지 이미지를 잘라내는 방법
Source Reader로 MP4의 지정 시각에 가까운 프레임을 꺼내고, stride와 RGB32의 alpha를 맞춘 뒤 PNG로 저장하는 구현 절차를 정리합니다.
-
C# Native AOT DLL을 C/C++에서 호출하는 방법
C# 클래스 라이브러리를 Native AOT로 네이티브 DLL로 발행하고, UnmanagedCallersOnly 엔트리 포인트를 C/C++에서 호출하는 구성을, 쓰임새와 구현 패턴, 주의점에서 정리합니다.
-
Media Foundation 입문 - COM 관점으로 API 이해하기
Media Foundation이 무엇인지, COM, HRESULT, IMFSourceReader, MFT 등 Windows 미디어 API의 기본 용어와 함께, 먼저 짚어야 할 순서로 정리합니다.