⌨ DEVELOPMENT/C++
[C/C++] clock vs gettimeofday Linux와 Windows의 코드 실행 시간 측정 방법
[C/C++] clock vs gettimeofday Linux와 Windows의 코드 실행 시간 측정 방법
2020.05.03windows program을 주력으로 개발하다 보니 자연스럽게 사용하던 clock을 이용하여 시간을 측정했습니다. 그런데 linux에서도 똑같이 시간을 측정했는데 system() API를 사용한 부분이 예상 시간이랑 너무나도 차이가 있더라고요... 확인해보니 리눅스에서의 시간 측정 방법이 잘못된 거였습니다. LINUX에서 실행 시간 측정 clock() CPU의 시간을 측정하는 API입니다. 즉, 프로세스가 CPU를 점유하지 않을 때는 시간이 측정되지 않게 되는데요, sleep(), system() API 등 CPU가 점유하지 않는 API를 사용한 시간은 측정이 되지 않습니다. gettimeofday() wall clock time이라고 하여 동작 시간을 측정하는 방식입니다. CPU의 동작 시간만을 확인..
[C/C++] InternetReadFile Simple File Download.
[C/C++] InternetReadFile Simple File Download.
2020.03.04복잡한 Socket 통신을 하지 않고 인터넷 URL 또는 Network에 공유된 파일을 다운로드하려면 어떻게 하면 좋을까요? MSDN에 보시면 아주 간단하게 사용할 수 있는 InternetReadFile API를 제공하고 있습니다. 해당 API는 파일을 다룰 때 사용하는 ReadFile과 매우 유사하게 동작하기 때문에 파일을 조금 다루어보셨다면 어렵지 않게 다룰 수 있을 거예요. 사용 전 가장 먼저 해주어야 할 행동은 역시 header를 include 해주는 것인데요, wininet을 사용하므로 lib로 링크해주어야 합니다. 이제 아주 간단한 방법으로 URL에 있는 파일을 로컬 파일로 저장하도록 해봅시다. 주의 : wininet을 사용하는 경우 서버 또는 service process에는 사용하면 안 됩니..
[Solved] Resolver error: The VS Code Server failed to start
[Solved] Resolver error: The VS Code Server failed to start
2019.12.14visual studio code insiders Remote-SSH ERROR visual studio code에서 remote-ssh를 통해 원격환경에서 개발을 하던 도중 다음과 같은 에러가 나오게되었습니다. 해당 문제는 remote-ssh도중 잘못된 데이터가 캐시 되었거나 visual studio code가 비정상 종료되었을 때 캐시를 제대로 정리하지 못해서 발생한것으로 판단됩니다. Remote-SSH ERROR OUTPUT MESSAGE [16:53:27.151] "install" terminal command done [16:53:27.151] Install terminal quit with output: 270fd8b8678f##32## [16:53:27.151] Received install..
[C/C++] Get Process Name by Process Id 3가지 방법
[C/C++] Get Process Name by Process Id 3가지 방법
2019.12.12How to get the process name from process id in C++ 현재 실행 중인 프로세스 또는 외부 프로세스의 이름 정보를 얻어오는 방법들을 정리합니다. MSDN을 참고하여 정리하였으며, MS에서 권장하는 각각의 방식들이 존재하기 때문에 그에 맞게 개발하면 됩니다. 현재 실행중인 프로세스 이름 정보를 획득하는 방법 현재 프로세스 정보를 획득하기 위해서는 별다른 정보가 필요 없습니다. 아주 간단하게 GetModuleFileName API를 이용하는 방법입니다. https://docs.microsoft.com/ko-kr/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulefilenamew GetModuleFileNameW functi..
[MFC] Dialog based - class name 지정하는 간단한 방법
[MFC] Dialog based - class name 지정하는 간단한 방법
2019.09.08MFC Dialog - FindWIndow를 위한 Class Name 지정하는 방법 요즘에도 MFC를 개발하는 사람이 있는지 모르겠네요... 이번에 MFC Project 중 FindWindow를 사용해야 하는데, Window Title을 바탕으로 하게 되면 오탐이 생길 수 있기 때문에 Class Name을 지정하여 정확한 윈도우를 찾아내기로 했습니다. 먼저 MFC Dialog based 로 프로젝트를 생성하게 되면 기본 Class Name은 #32770입니다. 그렇다면 Class Name을 어떻게 변경해야 할까요? 기본적으로 project.rc 파일이 생성되고, 그 안에 Dialog의 Properties를 보게 되면 Class Name이라는 항목이 존재합니다. 그런데 보면 알 수 있듯이 비활성화가 되어있..
[C++] Boost ASIO를 이용한 안전한 TCP/IP 비동기 소켓 서버 예제
[C++] Boost ASIO를 이용한 안전한 TCP/IP 비동기 소켓 서버 예제
2019.08.07C++ Async Socket Server Example server/client 프로그램을 개발하다 보면 간단하게 1:1 send, receive만 하면 편하겠지만 일반적으로 여러 클라이언트는 동시에 붙을 수 있고 서버는 동시에 여러 가지 일을 처리할 수 있는 비동기 서버가 필요한 경우가 더 많습니다. 비동기 소켓 서버를 간단히 만드는건 어찌어찌할 수 있지만 잘 만들기는 쉽지 않은데요, 이때 활용할 수 있는 검증된 라이브러리가 바로 Boost의 ASIO (Async Input Output) Library입니다. Boost Library 다운로드 및 설치 - https://wendys.tistory.com/115 [C/C++] 윈도우10 Boost 최신버전 설치 및 사용법 Boost Library Dow..
[MFC] Dialog Load GIF image
[MFC] Dialog Load GIF image
2019.07.28MFC GIF Example MFC Dialog에서 gif image 동작을 기본적으로 지원하지 않습니다. Loading Image 또는 다른 애니메이션 동작을 보여주기 위해선 Static Control (Picture Control)을 이용하는 방법이 있습니다. gif_control.hpp 주의 먼저 gif 이미지를 로드하기위해선 GDI+를 이용해야 합니다. 이전에도 말씀드린 대로 GDI+를 사용하기 위해선 초기화가 되어있어야 합니다. 초기화에 관련된 내용은 아래 링크를 참조하면 됩니다. https://wendys.tistory.com/118 [C++] How to use GDIPlus Library in c++ C++, MFC에서 GDI+ 사용법 윈도우 프로그램을 개발하다 보면 UI 작업이 필요한 경..
[C++] How to use GDIPlus Library in c++
[C++] How to use GDIPlus Library in c++
2019.07.28C++, MFC에서 GDI+ 사용법 윈도우 프로그램을 개발하다 보면 UI 작업이 필요한 경우가 많이 있습니다. 이때 주로 gdiplus.dll library를 사용하게 되는데, 코드를 가져와서 동작시키려는데 특별히 문제가 없는데 에러가 발생하는 상황이 있습니다. 바로 gdiplus를 초기화하지 않았을 때 입니다. gdiplus library를 사용하기 위해선 꼭 초기화 처리를 해주어야 합니다. #include #pragma comment(lib, "gdiplus") GDI+를 사용하기위해선 위와 같은 선언만 하게 되면 됩니다. #pragma comment(lib, "xxx") 를 통하여 프로젝트 속성에서 lib를 추가하지 않고 코드상으로 lib 파일을 추가할 수 있습니다. GdiplusStartup UL..
[MFC] 다이얼로그의 윈도우 소멸자 호출 순서
[MFC] 다이얼로그의 윈도우 소멸자 호출 순서
2019.07.28MFC Dialog 종료 소멸 순서 정리 최근 MFC 개발을 하다보니 소멸 순서에 대해 확인할 필요가 있어져서 확인 후 정리합니다. 모든 객체는 생성을 했으면 소멸을 해주어야하는게 당연합니다. 포인터의 경우엔 스마트 포인터를 이용하고, Lock Object는 RAII 패턴을 통해 Auto Lock을 사용하게 됩니다. Dialog based 로 개발을 하다보면 Thread를 통해 UI Control에 접근을 하여 특정 상황에 UI를 변경하는 작업을 하게 되는데, 이때 해당 Thread를 소멸자에서 제거하게 되면 UI Control.m_hwnd 가 nullptr이 되어 매번 여러 상황에서 체크를 해야 하는 상황이 발생할 수 있습니다. 그렇기 때문에 Dialog::~Dialog 소멸자가 아닌 WIndow Co..
[C/C++] string wstring format 사용하기
[C/C++] string wstring format 사용하기
2019.07.27std::string assign format string std::string 에는 format을 지정하여 입력하는 기능이 따로 없습니다. 그렇기 때문에 MFC에서 CString.Format처럼 간편하게 쓸만한걸 직접 만들어 사용하거나 boost::format을 사용하는 방법이 있습니다. 그중 만들어 사용하는 몇 가지를 소개하겠습니다. 예전부터 내려오는 방법으로 parameter에 ... 을 두어 가변 인자를 전달받는 방법입니다. 가변 인자를 전달받기 위해서는 가장 중요한 Calling Convention이 __cdecl 이어야 한다는 점입니다. Calling Convention이 궁금하신 분들은 아래 링크를 참조해주세요 https://wendys.tistory.com/22 __cdecl, __stdc..
[C/C++] 윈도우10 Boost 최신버전 설치 및 사용법
[C/C++] 윈도우10 Boost 최신버전 설치 및 사용법
2019.07.27Boost Library Download and Build C++ 필수 라이브러리 중 Boost Library에 대해 설치 및 사용법을 정리합니다. Boost는 공식 홈페이지에서 다운로드 가능하며, 주기적으로 업데이트가 되고 있습니다. https://www.boost.org/users/download/ Boost Downloads Current Release Version 1.70.0 April 12th, 2019 06:04 GMT New Libraries: Outcome, Histogram. Updated Libraries: DownloadsPlatformFileSHA256 Hash unixboost_1_70_0.tar.bz2430ae8354789de4fd19ee52f3b1f739e1fba576f0ad..
[C/C++] URL 전달을 위한 urlencode & urldecode
[C/C++] URL 전달을 위한 urlencode & urldecode
2019.07.11이번에 크로미움 등 브라우저 URL 전달 시 특수문자, 한글 등 문제 때문에 필요해서 만들어보았습니다. 다른 encoder, decoder에 비해 간단하게 제작이 가능하며, 더 좋은 방법이 있으면 댓글로 달아주세요 :) URL 전달을 위한 urlencode & urldecode 인터넷에서의 URL은 ASCII 문자열을 이용해서만 전송될 수 있는데, 그렇지 않게 전송한 경우 브라우저의 특성에 따라 question mark(?), ampersand(&), 슬래시(/), 공백 문자 같은 특수문자의 경우 잘리거나 의도치않게 변형이 될 수 있습니다. 그래서 이런 특수문자는 인코딩이 되는 것이 좋습니다. ASCII에 포함되지 않는 문자들(한글, 일본어 등등)은 더욱 encoding이 필요하게 됩니다. 인코딩은 %o..