본문 바로가기

c++62

윈도우 소켓 ] connect 비동기로 처리하기 논블로킹 소켓으로 설정한 뒤 connect를 시도한다. connect 함수의 리턴값이 SOCKET_ERROR인 경우, WSAGetLastError()로 오류를 확인하여 WSAEWOULDBLOCK 인 경우 현재 백그라운드에서 연결이 진행중임을 나타낸다. writeSet에 소켓을 넣고 select 함수를 호출하여 타임아웃 시간 동안 write-ready 상태가 되는지 감지한다. select() 함수는 오류가 발생한 경우 -1, 타임아웃인 경우 0 그리고 이벤트를 감지한 경우 감지한 소켓 수를 리턴한다. // 논블로킹 모드로 설정 u_long nonBlockOpt = 1; if (ioctlsocket(cSocket, FIONBIO, &nonBlockOpt) == SOCKET_ERROR) { OutputDebu.. 2023. 9. 30.
C++ ] 람다식 사용법 및 람다식으로 콜백 구현 람다식(lambda expression)을 사용하면 코드 내에서 명시적인 함수 정의 없이도 익명함수를 생성하고 사용할 수 있게 해준다. 이런 함수는 주로 한번만 사용하거나 특정 상황에서만 필요한 경우 유용하다. 람다식의 기본 구조 [캡처](매개변수) -> 반환형 { // 람다 함수 본문 // ... } [캡처] { // 람다 함수 본문 // ... } 1. [캡처] : 외부 변수를 사용하기 위해 외부 범위의 변수를 캡처할 수 있다. [ ] 안에 캡처할 변수를 지정한다. [] : 아무것도 캡처하지 않음 [변수] : 특정 변수를 값 복사로 캡처 [&변수] : 특정 변수를 레퍼런스로 캡처 [=] : 모든 외부 변수를 값 복사로 캡처 [&] : 모든 외부 변수를 레퍼런스로 캡처 2. (매개변수) : 람다 함수의.. 2023. 9. 26.
C++ ] std::thread 스레드 사용법 스레드 라이브러리 스레드를 사용하는 주요 목적은 병렬 프로그래밍을 통해 여러 작업을 동시에 실행시켜 프로그램의 효율성을 높이는 것이다. 예전에는 멀티스레드 프로그래밍을 하기 위해서든 윈도우의 경우 Win32 API를 사용하거나, 리눅스는 POSIX thread (pthread) API를 사용하었는데 C++ 11부터는 C++ 표준 라이브러리에서 스레드를 지원되기 때문에 헤더를 포함하고 std::thread 클래스를 사용하면 된다. 1. 기본 사용법 std::thread 생성자는 스레드가 시작될 때 실행할 함수를 인자로 받는다. 이 때 함수는 글로벌 함수, 멤버 함수, 람다 표현식 등 다양한 형태일 수 있는데 하나씩 살펴보자. 1.1 글로벌 함수 전달하기 #include #include using names.. 2023. 9. 25.
C++ ] std::map 자료구조 사용법 map은 키-값 쌍을 저장하고 검색하는 데 사용되는 자료구조 중 하나로 사용법은 아래와 같다. 1. map 헤더파일 포함 #include 2. map 객체 생성하기 생성시 키와 값의 자료형을 지정해야하는데 개인적으로는 문자열 키와 함수포인터 값을 가지는 map을 자주사용한다. map myMap; 3. 원소 추가하기 (insert) 원소를 추가할 때는 키-값 쌍을 pair 객체로 전달하여 추가하는데 insert 함수를 사용하는 방법도 있고 아래의 4번을 사용하는 방법도 있다. 각 키는 고유해야 하며, 각 키에 대응하는 값이 하나씩 존재하게 된다. pair 객체를 만들때는 pair로 생성하거나 make_pair 함수를 사용해도 되고 혹은 {} 중괄호를 사용하는 방법도 있다. 또한 map는 중복을 허용하지 않.. 2023. 9. 23.
C++ ] 시스템 명령어 실행 #include #include int main() { const char* command = "ls"; // 실행할 명령어 int result = system(command); // 명령어 실행 if (result == 0) { std::cout 2023. 7. 11.
C, C++ ] system("pause") 대신 사용할 수 있는 방법 system("pause")는 운영체제에 종속적이고 운영체제에게 "pause"라는 명령을 실행하도록 요청하므로 비슷한 기능을 구현할 다른 방법을 생각해보자. C 윈도우 환경에서만 가능한 방법 #include #include int main() { printf("Press any key to continue...\n"); while (!_kbhit()); (void)_getch(); return 0; } conio.h 는 윈도우에서만 사용 가능하다. C #include int main() { printf("Press Enter to continue...\n"); (void) getchar(); return 0; } getchar()는 표준 라이브러리이기 때문에 이식성이 좋으며, 보다 간단하게 사용자의 입력.. 2023. 7. 11.
C++ ] Manipulator와 iomanip 헤더 iomanip 헤더에는 스트림을 제어하기 위한 다양한 Manipulator가 포함되어 있다. 스트림은 C++에서 데이터의 입력 및 출력을 처리하는 방식을 말하며, 이를 위해 "iostream" 라이브러리에서 제공하는 클래스와 함수를 사용하는데, Manipulator는 이러한 스트림을 조작하여 데이터의 포맷팅, 출력 형식을 유연하게 지정할 수 있게 한다. endl; 도 개행 문자를 출력하고 버퍼를 비우는 Manipulator이다. #include #include int main() { int number = 12345; double pi = 3.14159; // setw()를 사용하여 출력 폭(width) 지정 std::cout 2023. 5. 28.
C++ ] 예외처리 try-catch와 throw C++에서 try-catch 문은 예외가 발생할 수 있는 코드 블록을 감싸고, 발생한 예외를 적절하게 처리하는 메커니즘을 제공한다. try-catch 기본 구문 try { // 예외가 발생할 수 있는 코드} catch (예외_유형1& e) { // 예외_유형1에 해당하는 예외 처리 throw; // 다시 던질 수도 있음} catch (예외_유형2& e) { // 예외_유형2에 해당하는 예외 처리 // 다시 던지지 않고 처리하고 끝남} catch (...) { // 기타 모든 예외를 처리하는 블록} try 블록: 예외가 발생할 수 있는 코드를 포함하는 블록. 이 블록 내에서 예외가 발생하면 예외를 던진다.catch 블록: 발생한 예외를 처리하기 위한 블록. catch 블록은.. 2023. 5. 28.
C++ ] JSON 데이터 포맷, rapidjson 라이브러리 사용해 파싱 HTML 삽입 미리보기할 수 없는 소스 JSON(JavaScript Object Notation) 은 데이터 교환을 위한 경량화된 포맷으로, 객체와 배열 등의 데이터 구조를 표현한다. 객체는 중괄호 {} 로 감싸진 key-value 쌍들의 집합이며, 각각의 key는 문자열이고, value는 JSON에서 허용되는 모든 데이터 타입으로 표현될 수 있다. 배열은 대괄호 [] 로 감싸진 값들의 리스트이며, 역시 값은 JSON에서 허용되는 모든 데이터 타입으로 표현될 수 있다. JSON에서 객체의 속성들과 배열의 원소들은 콤마 , 로 구문하며 배열과 객체는 함께 사용할 수 있다. 객체는 배열의 요소로 포함될 수 있는데, 이 경우, 객체는 배열의 요소가 된다. 또한, 객체 안에 배열이 포함될 수 있으며. 이 경우,.. 2023. 5. 14.
C++ ] stream 상속관계 ios_base : 다른 입출력 클래스들의 기반이 되는 클래스로서, 입출력 스트림의 상태와 플래그를 관리 ios : ios_base 클래스를 상속하며, 입출력 스트림의 상태와 플래그를 조작할 수 있는 멤버 함수를 제공 istream : 입력 스트림을 다루는 클래스. 콘솔 입력 및 파일 읽기 등을 다룰 수 있다. ostream : 출력 스트림을 다루는 클래스. 콘솔 출력 및 파일 쓰기 등을 다룰 수 있다. fstream : 파일 입출력을 다루는 클래스. 파일의 읽기 및 쓰기를 다룰 수 있다. stringstream : 메모리상에서 문자열을 읽고 쓰기 위한 클래스. std::string과 유사한 인터페이스를 제공하며, 문자열을 파싱하거나 변환하기 위한 용도로 사용된다. ifstream : 파일 입력에 특화된.. 2023. 5. 14.