❓기존 문제점리스트 컨트롤 동시 접근 문제로그 남길 때 UI상에서 보여주는 로그창에 동시접근 문제삽입, 설정, 삭제 를 동시에 실행하면 문제 발생 가능성 있음파일 쓰기 동시 접근 문제CSV 남길 때 같은 로그 파일(.csv)에 대해 여러 쓰레드가 동시에 접근하면 충돌할 가능성이 있다 ✅해결 방법CCriticalSection을 사용하여 파일 동기화🔍 CCriticalSection( CCriticalSection ) 동작 방식1. 한 스레드가 WriteSystemLog에 진입하면 락을 획득 (CSingleLock lock(&csLogWrite, TRUE);)2. 다른 스레드는 락이 해제될 때까지 대기3. 파일 쓰기가 끝나면 락이 자동으로 해제됨CCriticalSection은 Windows 내부 최적화가 되..

저장버튼 눌렀을 때 태우면 된다.창에 따라서 다르게 파라미터를 넘겨줌 이건 글로벌이나 헤더에 선언enum { ParamSetting = 0, AdminSetting, MasterSetting, MotionSetting}; 이건 세팅할 때 태우면 됨void CDlgSetting::SaveDisplayCaptureSetting(int nType){ // 캡쳐후 저장하는 함수 // 1. 화면의 DC(디바이스 컨텍스트)를 가져옴 HDC h_screen_dc = ::GetDC(NULL); if (!h_screen_dc) return; // 2. 화면 해상도 정보를 얻음 int width = ::GetDeviceCaps(h_screen_dc, HORZRES); int height = ::GetDeviceCap..

❓원인:스택 오버플로우 초과 문제일 때 나타나는 오류예: 함수 내에서 큰 배열(예: char buffer[1000000];)을 선언하면, 스택이 부족할 수 있음. ✅ 해결: 1. 큰 지역 변수는 힙으로 할당: 스택에 큰 배열을 두지 말고 new 또는 malloc을 사용해서 힙에 할당// 스택 할당 (문제 발생 가능)void func() { char largeArray[1000000]; // 스택 오버플로우 가능}// 힙 할당 (안전)void func() { char* largeArray = new char[1000000]; // 힙 메모리 사용 delete[] largeArray;} 2. 힙 메모리 늘려주기(추천!!)프로젝트 속성 → 시스템 → 스택 예약 크기 를 늘려준다.3. 재귀 ..

코드보다 아직도 헷갈려서 정리하는 것 _T("")유니코드(UTF-16)와 ANSI(멀티바이트) 간의 호환성을 유지하기 위해 사용._T는 tchar.h 헤더 파일에 정의된 매크로#define _T(x) _TEXT(x) ☞ 프로젝트 설정에 따라 유니코드나 멀티바이트 문자로 컴파일된다.유니코드 설정일 때: _T("text")는 L"text"로 처리멀티바이트 설정일 때: _T("text")는 "text"로 처리사용 예시TCHAR str[] = _T("Hello"); L""항상 유니코드(UTF-16) 문자열을 나타낸다.L 접두사는 문자열을 유니코드 리터럴로 지정한다.멀티바이트 환경에서도 유니코드 문자열로 처리된다.사용 예시wchar_t str[] = L"Hello"; 결론 프로젝트가 유니코드와 멀티바이트 설정..
폴더 없을 때 폴더 생성 코드 //폴더 없을경우 폴더 작성 if (!PathIsDirectory(strFolderPath)) { // 경로 존재 여부 확인 if (!CreateDirectory(strFolderPath, NULL)) { DWORD dwError = GetLastError(); // 여기에 dwError를 로그로 남김 or 메세지박스로 남김 } } 중간 폴더도 생성하는 재귀 함수bool CreateDirectories(const CString& path) { CString currentPath = L""; int start = 0; while ((start = path.Find(L'\\', start + 1)) != -1) { currentPath ..