프로그래밍/C/C++
-
🧰 C++11 std::atomic 표준 라이브러리프로그래밍/C/C++ 2023. 6. 1. 09:13
std::atomic은 멀티스레딩 환경에서 안전하게 변수를 접근할 수 있도록 하는 C++의 표준 라이브러리 클래스입니다. 이 클래스는 다양한 변수 타입(int, float, bool 등)에 대한 원자적인 조작(atomic operation)을 제공합니다.💡 std::atomic의 특징std::atomic은 다음과 같은 특징을 가지고 있습니다.멀티스레딩 환경에서 안전하게 변수를 접근할 수 있습니다. 이 클래스를 사용하면 변수에 대한 동기화를 수동으로 처리할 필요가 없으므로, 코드를 간단하게 유지할 수 있습니다.std::atomic은 원자적인 조작(atomic operation)을 제공합니다. 원자적인 조작은 하나의 스레드에서 실행 중인 코드가 중단되지 않고, 전체적으로 원자적으로 실행되는 코드 블록입니다..
-
🖥️ C++에서 윈도우 프로그램 동시 실행 방지하기프로그래밍/C/C++ 2023. 2. 28. 13:25
C++에서 윈도우 프로그램을 개발할 때 중복 실행을 방지하는 방법 중 가장 간단한 방법은 CreateMutex 함수를 사용하는 것입니다.#include int main(){ HANDLE hMutex; hMutex = CreateMutex(NULL, TRUE, "MyMutex"); if(GetLastError() == ERROR_ALREADY_EXISTS) { MessageBox(NULL, "이미 실행 중입니다.", "알림", MB_OK); return 0; } // 중복 실행이 아닐 때 실행할 코드 작성 ... ReleaseMutex(hMutex); CloseHandle(hMutex); return 0;}위 코드에서 Creat..
-
C++20 코루틴 기능을 활용한 비동기 프로그래밍 예제프로그래밍/C/C++ 2023. 2. 23. 10:03
✨C++로도 비동기 프로그래밍을 구현할 수 있어요!✨C++11부터는 C++ 표준 라이브러리에 스레드, 뮤텍스, 조건 변수와 같은 다중 스레드 지원 기능이 추가되어, 비동기 프로그래밍을 구현할 수 있게 되었어요! 또한 C++11에서는 표준 라이브러리에 비동기 처리를 위한 기능들을 추가했습니다.C++11에서 추가된 비동기 처리 기능은 std::async, std::future, std::promise, std::packaged_task 등이 있어요. std::async를 사용하면 비동기 함수 호출을 간단하게 작성할 수 있고, std::future를 사용하여 비동기 함수 호출 결과를 받을 수 있어요. 또한, std::promise와 std::packaged_task를 사용하여 비동기 함수 호출 결과를 만들고 ..
-
C++ std::thread와 std::mutex를 사용한 멀티스레딩 예제프로그래밍/C/C++ 2023. 2. 22. 11:23
std::thread는 C++11부터 추가된 표준 라이브러리 클래스로, 멀티스레드 프로그래밍을 쉽게 구현할 수 있도록 도와줍니다.std::thread 클래스는 스레드를 생성하고, 실행시키며, 종료시키는 등의 다양한 기능을 제공합니다. std::thread를 사용하면, 별도의 스레드를 생성하여 해당 스레드에서 작업을 수행할 수 있습니다. 예를 들어, 주 스레드에서는 사용자 인터페이스를 처리하고, 별도의 스레드에서는 파일 입출력 또는 계산 등의 작업을 수행하는 것이 가능합니다. std::thread는 스레드 생성 시 실행될 함수(또는 람다 표현식)와 인수를 전달하여 스레드를 생성할 수 있습니다. 생성된 스레드는 join 함수를 사용하여 종료될 때까지 대기하거나, detach 함수를 사용하여 분리(detach..
-
C++ std::ofstream 사용하는 방법프로그래밍/C/C++ 2023. 2. 7. 16:10
📝C++에서는 ofstream클래스를 사용하여 파일에 쓸 수 있습니다. 이 ofstream 클래스는 표준 C++ 라이브러리의 일부이며 파일에 쓰기 위한 스트림 기반 인터페이스를 제공합니이 ofstream클래스는 다음을 포함하여 파일에 데이터를 쓰기 위한 여러 멤버 함수를 제공합니다.open: 쓰기용 파일을 엽니다.write: 데이터 블록을 파일에 씁니다.put: 파일에 단일 문자를 씁니다.operator객체 로 파일을 열고 ofstream 새 데이터를 작성하여 파일의 내용을 업데이트할 수 있습니다.파일 끝에 ios::app 데이터를 추가하려면 플래그 를 사용하여 파일을 열 수 있습니다 💡#include #include int main(){ std::ofstream outfile; outf..
-
C/C++ 콘솔창에서 커서를 변경해보자 (GetConsoleScreenBufferInfo, SetConsoleCursorPosition)프로그래밍/C/C++ 2023. 1. 19. 09:40
콘솔창에서 메뉴 입력을 받는 영역을 만들고 커서를 제어하여 특정 위치에서 입력을 받게 하고자했다. 위에 이미지와 같이 이미 명령어를 소개하고, 입력값을 소개 테이블 안에서 작성을 하고 싶었다. 일반적으로 콘솔 커서 관련 키워드로 찾아보다가 다음과 같은 코드를 찾을 수 있었다. COORD Cur; CONSOLE_SCREEN_BUFFER_INFO a; // 현재 커서 정보를 가져온다 GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &a); Cur.X = a.dwCursorPosition.X; Cur.Y = a.dwCursorPosition.Y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), C..
-
C/C++ Struct Memory Padding프로그래밍/C/C++ 2022. 12. 28. 10:53
C언어 기반으로 Struct를 사용하여 구조체를 생성 했을 경우 다음과 같은 문제를 본적이 있을 것이다. 일반적으로 내가 할당한(할) 타입의 메모리 크기를 보기위해 다음과 같은 코드를 작성한다.#include struct MyStruct { char ch; // 1바이트 char * pCh; // 4바이트 int integer; // 4바이트};int main(){ struct MyStruct custom_type; size_t size = sizeof(custom_type); printf("Size [%d]Byte ", size);}구조체를 만들고 해당 구조체의 크기를 알아보기 위해 sizeof(struct MyStruct) 또는 sizeof(c..