프로그래밍
-
C# 표준 네이밍 규칙프로그래밍 2014. 5. 2. 22:16
이 네이밍 규칙은 닷넷 스파이더 팀에서 만든 [C# Coding Standards and Best Programming Practices]를 바탕으로 만들었습니다. 전반적으로 카멜(Camel) 표기법 파스칼(Pascal) 표기법으로 이루어짐. 헝가리안 표기법은 사용하지 않는다.(컴파일러의 발전으로 변수 타입 확인이 쉬워짐. 헝가리안 표기법은 이제 난잡하게 보이는 요인이 될 수 있음) 파스칼(Pascal) 표기법: 단어의 첫글자는 모두 대문자, 나머지는 소문자 (예: GetObject)카멜(Camel) 표기법: 첫 단어는 소문자, 나머지는 첫 문자를 대문자로 하는 표기법 (예: getObject) 일반 함수: 파스칼void GetCurrentTime( ... ) 클래스: 파스칼class Session 멤버..
-
[c++11] std::mutex프로그래밍/c++ 2014. 4. 27. 13:14
쓰레드(thread)를 사용하다보면 하나의 자원에 동시에 접근하는 경우가 있는데, 이를 방지하기 위해 사용하는 표준 라이브러리에서 제공하는 객체(C++11) 헤더 선언 std::mutex mutex; lock() 뮤텍스를 소유를 시도함. 뮤텍스를 소유할 때까지 쓰레드는 대기. unlock() 뮤텍스의 소유권을 놓음. 쓰레드 소유를 대기한(lock을 호출한) 쓰레드가 있다면 소유권은 다른 쓰레드에게 넘어간다. try_lock() bool을 반환. 기존의 lock은 소유권을 받을 때까지 대기에 들어갔다면, 이 함수는 호출 되는 순간 소유권을 얻어내지 못하면 false를 반환. 공유된 자원이 다른 쓰레드에서 사용중이라면(try_lock 반환값이 false라면), 다른 작업을 하는 식으로 사용이 가능. ++ 윈..
-
boost singleton_pool의 사용프로그래밍 2014. 4. 20. 01:02
boost의 메모리 풀 관련 라이브러리 중 하나인 boost::singleton_pool은 전역적인 메모리 풀로 스레드에 대해 안전(thread-safe)하다. 사용 시, 템플릿 인자로 태그(tag)의 역할을 할 더미 클래스와 pool이 할당하는 사이즈를 받는다.똑같은 용량을 할당하는 메모리 풀이라도, 태그가 다르면 공유하지 않는 메모리 풀을 사용한다. (태그의 이름을 변수 이름이라고 생각해도 괜찮다.) struct pool_tag{}; class test_class { public: test_class(){} test_class(int a, int b, int c){} test_class(int a, int b, int c, int d){} }; typedef boost::singleton_pool< ..
-
boost object_pool의 사용프로그래밍 2014. 4. 19. 23:41
boost 라이브러리의 메모리 풀(memory pool) 관련 클래스 중 하나인 object_pool은 메모리 풀의 역할도 하면서 동시에 클래스의 생성자/소멸자 호출이 가능하다. #include ... boost::object_pool pool; object_pool::malloc(...) 클래스 크기만큼의 메모리만 할당을 해준다.(생성자 호출 X) test_class* p = op.malloc(); object_pool::free(...) 클래스 크기만큼의 메모리를 해제한다.(소멸자 호출 X) op.free(p); object_pool::construct(...) 클래스 크기만큼의 메모리를 할당하며, 생성자를 호출한다. (생성자 호출 O) 주의할 점은 생성자의 인자로는 최대 3개까지만 받을 수 있으며,..
-
fopen할 때 파일 경로 설정에서 삽질...프로그래밍 2013. 4. 1. 17:41
fp = fopen("C:\\Users\\Esnelsias\\Desktop\\cmd.exe", "rb" ); 파일 경로를 저런식으로 \\를 두 개 넣어줬어야 했는데 fp = fopen("C:\Users\Esnelsias\Desktop\cmd.exe", "rb" ); 이런식으로 했었더니 fp값이 NULL로 잡혀 오류가 있었다. ++ 2019/03/11 R"()" string literal을 씁시다.\\ 해줄 필요 없이 R"(C:\Users\Esnelsias\Desktop\cmd.exe)" 로 써도 됨.string literal: https://en.cppreference.com/w/cpp/language/string_literal
-
원형 큐(Circular Queue) 제작프로그래밍 2013. 3. 30. 15:29
큐는 데이터를 삽입할 때 뒤쪽인 tail 쪽에 삽입을 하고 읽을 땐 head부터 읽는 FIFO(First In First Out) 구조의 자료형이다. 이와 같은 구조의 큐를 선형 큐라고 한다. 선형 큐는 데이터를 삭제(pop)할 때마다 head가 뒤로 밀려 앞에 공간이 남아있음에도 불구하고 데이터를 삽입할 수 없는 문제가 발생한다.[출처] 원형큐|작성자 since860321 이러한 큐의 단점을 개선한 것이 원형 큐이다. 이 가득찬 원형 배열의 데이터를 차례대로 읽은 후, 데이터를 삽입을 하려고 한다면 다시 1의 자리에부터 데이터가 채워지게 구현을 하면 될 것이다. bool push( const T& data ) { ... if( tail == 배열의 크기 ) { tail = 배열의 처음; } ... }
-
C++ 구조체 멤버를 숨기는 기법 Pimpl프로그래밍/c++ 2013. 3. 28. 09:42
1 // 헤더 파일 // 2 3 class Pimpl 4 { 5 public: 6 Pimpl(void); 7 ~Pimpl(void); 8 9 protected: 10 struct Pim; // 맴버변수의 구조체 전방선언 11 Pim* pimpl; // 전방선언한 멤버의 포인터 12 }; 13 14 // CPP 파일 // 15 #include 16 17 struct Pim // 구조체 이름은 전방선언과 같은 이름으로! 18 { 19 int a; 20 int b; 21 int c; 22 //...멤버변수들 선언 23 } 24 25 Pimpl::Pimpl( void ) 26 { 27 pimpl = new Pim; // 생성자에서 멤버 변수에 할당을 함 28 } 29 30 ... 31 32 ~Pimpl::Pim..