일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- bitcoin
- json
- Callback
- mutex
- write
- go언어
- Python
- range
- Close
- go
- Sync
- File
- GO 언어
- package
- window
- http
- 영화
- install
- c++
- JavaScript
- windows
- FOR
- 리뷰
- Linux
- C
- Golang
- channel
- 책
- API
- tcp
- Today
- Total
목록전체 글 (200)
Code Habit
싱글턴 패턴은 소프트웨어 디자인 패턴 중 하나로 프로그램 내에 인스턴스가 오직 하나만 존재하도록 보장하는 패턴이다. 이 패턴은 전역 변수를 사용하지 않고 객체의 단일 인스턴스에 대한 전역적인 접근을 제공한다. - example #ifndef _SINGLE_TON_TMPL_ #define _SINGLE_TON_TMPL_ #include template class Singleton_tmpl : public T { public: Singleton_tmpl() {} ~Singleton_tmpl() {} static Singleton_tmpl *GetInstance() { if (Singleton_tmpl::m_pInstance == nullptr) { Singleton_tmpl::m_pInstance = new..
epoll은 리눅스에서 고성능 네트워크 프로그래밍을 위해 사용되는 I/O 이벤트 알림 모델이다. 대규모 파일 디스크럽터를 효율적으로 관리하며 이는 서버가 많은 수의 클라이언트와 동시에 통신해야 하는 고성능 네트워크 애플리케이션에 매우 유용하다. - epoll_create int epoll_create(int size); size만큼의 입출력 이벤트를 저장할 공간을 만든다. 그러나 리눅스 2.6.8 부터는 커널이 필요한 데이터의 크기를 동적으로 조정하기 때문에 0보다 큰 값만 입력하면 된다. - epoll_ctl int epoll_ctl(int epfd, int op, int fd, struct epoll_events *event); epoll에 fd를 등록/수정/삭제 하는 함수로 epoll에서 관심있는 ..
Nats는 오픈소스 메시징 시스템을 지원하는 서비스의 한 종류로 다양한 응용프로그램 간의 효율적인 통신을 지원한다. 기본적으로 publisher와 subscriber로 구성되어 있으며 다양한 프로그래밍 언어에 대한 클라이언트 라이브러리를 제공하므로 다양한 언어로 작성된 애플리케이션 간의 통신을 할 수 있다. c++로 작성된 client 예제이다. #include #include void messageHandler(natsConnection* conn, natsSubscription* sub, natsMsg* msg, void* closure) { // get data const char* data = natsMsg_GetData(msg); int dataLen = natsMsg_GetDataLength(..
dynamic_pointer_cast, static_pointer_cast 는 c++에서 스마트 포인터를 다룰때 상/하향 캐스팅을 위해 사용된다. 여기서 상/하향 캐스팅은 자식 클래스에서 부모 클래스로 변환 ( 상향 캐스팅 ), 부모 클래스에서 자식 클래스로 변환 ( 하향 캐스팅 )을 의미한다. - dynamic_pointer_cast dynamic_pointer_cast는 런타임에 타입의 안정성을 검사하는 동적 캐스팅을 수행한다. 이는 주로 하향 캐스팅 ( 부모 -> 자식 )에 사용된다. - static_pointer_cast static_pointer_cast는 컴파일 타임에 수행하는 정적 캐스팅을 수행한다. 이는 상향 캐스팅( 자식 -> 부모 ), 하향 캐스팅 ( 부모 -> 자식 )에서 모두 쓰일 ..
여러 쓰레드에서 공유되는 데이터에 대해 동시에 접근하는 것을 방지하기 위해 std::mutex를 사용할 수 있다. #include #include int g_shared_data = 0; std::mutex g_mtx; void IncrementSharedData() { // 스코프 기반 락 관리 std::lock_guard lock(g_mtx); g_shared_data++; } int main() { std::vector threads; // 10개의 쓰레드 생성 및 실행 for(int i=0; i < 0; i++) { threads.emplace_back(IncrementSharedData); } // 모든 쓰레드가 종료될때까지 기다림 for(auto& thr : threads) { thr.join..
c++ 11 이상부터는 std::function, std::bind 사용하여 callback 함수를 묶어 호출하는 패턴을 사용할 수 있다. class CallbackClass { public: void Callbackfunction(int x) { std::cout
범위 기반 for 문은 c++11 부터 도입된 문법으로 컨테이너의 모든 요소를 순회하기 위한 보다 간결하고 읽기 쉬운 방법을 제공한다. 이 구문은 Java의 enhanced for loop과 Python의 for-in loop과 비슷하다. Range-based for Loop은 컨테이너의 시작부터 끝까지 모든 요소를 순회하며 auto를 사용하여 각 요소에 대한 접근을 단순화 한다. std::map employee_map; employee_map[0] = "Kane"; employee_map[1] = "Jane" employee_map[2] = "Karr"; for (const auto& pair : employee_map) { auto& no = pair.first;// key 접근 auto& name ..
std::chrono 라이버리는 c++ 11부터 제공되는 라이브러리로 시간을 측정하고 관리하는 다양한 유형의 클래스와 함수를 제공하여 시간 간격, 지연 및 시간 단위 변환 등 시간을 관련 작업을 수행한다. 1. 시간 간격 구하기 #include #include int main() { // get start_time auto start_time = std::chrono::high_resolution_clock::now(); // wait 2 second std::this_thread::sleep_for(std::chrono::seconds(2)); // get end time auto end_time = std::chrono::high_resolution_clock::now(); // cal duratio..