소연의_개발일지
[C++ MFC] 로그 남길 때 동시 접근 문제, CCriticalSection 사용
개발공부/C++ 2025. 3. 13. 11:30

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

article thumbnail
[C++ MFC] 화면 캡쳐하는 함수
개발공부/C++ 2025. 3. 11. 11:22

저장버튼 눌렀을 때 태우면 된다.창에 따라서 다르게 파라미터를 넘겨줌  이건 글로벌이나 헤더에 선언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..

article thumbnail
test dword ptr [eax],eax ; probe page. 오류 해결
개발공부/C++ 2025. 3. 10. 15:48

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

article thumbnail
[C++ MFC] 문자열 _T("")와 L""
개발공부/C++ 2024. 12. 26. 09:31

코드보다 아직도 헷갈려서 정리하는 것 _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";  결론 프로젝트가 유니코드와 멀티바이트 설정..

[C++] 폴더 없을 때 폴더 생성
개발공부/C++ 2024. 12. 17. 14:17

폴더 없을 때 폴더 생성 코드 //폴더 없을경우 폴더 작성 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 ..

article thumbnail
Everything: 파일 검색 프로그램
기타/유틸리티 2024. 12. 17. 09:57

다운로드  혹은 아래 링크에서 다운로드 https://www.voidtools.com/ko-kr/downloads/ 다운로드 - voidtools www.voidtools.com  아주 편하다 굿굿

article thumbnail
CSViewer: CSV 뷰어
기타/유틸리티 2024. 12. 17. 09:53

https://csviewer.com/ Download free CSV file viewerDownload CSV file viewer. Forever free, no strings attached. Load multiple CSV files with up to 500 million rows at once. Search, filter, and export.csviewer.com     csv 볼 때 편하다

article thumbnail
[C++ ] Systemtime : 시스템 시간 날짜 얻어오기
개발공부/C++ 2024. 12. 17. 09:35

Ctime으로는 밀리세컨을 가져올 수 없어 시스템 타임으로 구현했다. SYSTEMTIME이란?SYSTEMTIME은 Windows API에서 날짜와 시간 정보를 나타내는 구조체이다.이를 통해 연도, 월, 일, 시, 분, 초와 같은 세부 날짜 및 시간 데이터를 저장할 수 있다.  SYSTEMTIME 구조체typedef struct _SYSTEMTIME { WORD wYear; // 연도 (예: 2024) WORD wMonth; // 월 (1-12) WORD wDayOfWeek; // 요일 (0-6, 0 = 일요일) WORD wDay; // 일 (1-31) WORD wHour; // 시 (0-23) WORD..

article thumbnail
[Python] PyQt로 제작한 파일 exe파일로 만들기
개발공부/Python 2024. 12. 11. 09:09

python PyQt 파일 exe로 저장하기 1. PyInstaller 설치먼저, PyInstaller를 설치해야 한다. 터미널 또는 커맨드 프롬프트에서 아래 명령어를 입력하여 설치한다.pip install pyinstaller 2. .ui 파일을 .py 파일로 변환PyQt5 UI 파일(.ui)을 Python 코드로 변환하려면 pyuic5 도구를 사용해야 한다.pyuic5 -o mainUI.py ExceltoCSV.uiExceltoCSV.ui 파일을 Python 파일 mainUI.py로 변환하는 명령어이다. 3. PyInstaller로 EXE 파일 만들기이제 Python 코드 (main.py, mainUI.py, convert_to_csv 함수 등)를 EXE 파일로 변환할 수 있다. 터미널 또는 커맨드 ..

article thumbnail
[C++ MFC] 출력 창에서 디버깅 내용 보기
개발공부/C++ 2024. 12. 4. 16:38

OutputDebugString을 사용해 메시지를 출력한다. CString strMessage; strMessage.Format(_T("rectControl1: LT(%d, %d) RB(%d, %d), point: (%d, %d)"), rectControl1.left, rectControl1.top, rectControl1.right, rectControl1.bottom, ptScreen.x, ptScreen.y); // OutputDebugString을 사용해 메시지 출력 OutputDebugString(strMessage); OutputDebugString(_T("\n")); // 줄바꿈 추가 출력창 단축키는 CTRL + ALT + O 출력예시