본문 바로가기

Development Experience

(85)
서버 프로그래밍 시 유의 사항 끄적임 서버 프로그래밍을 할 때에는 업데이트의 유연성을 확보하는 게 좋다. 예를 들어 어딘가로 전송해야 할 메시지를 별도의 파일로 빼놓고 이 파일을 서버 프로그램이 읽는다든가, 여러가지 서버 옵션을 켜고 쓸 수 있도록 별도의 버튼, 커맨드, 백도어등을 만들어 둔다든가 해서 이미 구동중인 서버를 끄지 않으면서 서버의 동작을 변경할 수 있는 경로를 되도록 많이 만들어두는게 정신건강에 좋을 듯 하다.
C++ unique_ptr 의 deleter 1. c++ unique_ptr 을 생성할 때 파라미터로 deleter 함수를 넣어줄 수 있다. ex) std::unique_ptr upMyClass(new MyClass(), [](MyClasss* ptr){ delete ptr; });
c++ std::function 과 std::bind, C2893 Error c++ std::function 변수를 선언할 때 std::bind() 를 사용한다. 이 때 함수의 파라미터로 전달할 인자들을 bind 함수내에 같이 명시해줘야 C2893 에러가 발생하지 않는다.
C++ 다른 프로젝트에 있는 파일 참조하기 1. 다른 프로젝트에 선언된 클래스를 테스트하려 했는데 LNK2019 에러가 발생하였다. 헤더는 어찌저찌 상대 경로를 찾아서 넣었는데 결국 실제 정의를 못 찾기 때문에 문제가 된다고 한다. (by 구글느님) 2. 테스트 프로젝트를 따로 만들어서 테스트 관련 작업을 하려고 했는데 그냥 기존 프로젝트에서 테스트 클래스를 하나 만드는 방식으로 변경해서 테스트를 진행하였다.
영상 frame 관리 [ 증상 ] 영상 frame streaming에서 원형 큐를 사용하여 frame을 관리하고 있었다. frame이 Queue의 size만큼 수신되면 원형 큐는 가득차게 되는데, 다음 frame을 받기 위해 나는 Queue에 존재하는 맨 처음 frame과 맨 마지막 frame의 시간 차가 일정 간격(period A라 하자)이상 차이가 나면 맨 앞의 frame을 버리는 정책을 취하였다. 하지만 이 과정에서 한 가지 버그가 발생하였는데, 이는 Queue에 frame이 가득차는 시간이 period A 보다 짧게 걸릴 경우, 맨 앞의 frame은 절대 버려지지 않는 것이었다. 이로 인해 새로 수신되는 frame들도 꽉찬 Queue에 들어가지 못하는 현상이 발생하였다. [ 해결 ] 그래서 나는 매 frame을 수신할..
C++ 스마트 포인터 간단 정리 1. unique_ptr, shared_ptr, week_ptr 은 raw pointer를 담는 그릇이라고 생각하면 쉽다. 2. unique_ptr => raw pointer에 대한 소유권을 단 하나의 스마트 포인터 객체만 가질 수 있다. 만일 다른 unique_ptr에게 raw pointer에 대한 소유권을 넘기려면 move 함수를 사용해야 한다. 3. shared_ptr => raw pointer에 대한 소유권을 여러 개의 스마트 포인터 객체가 가질 수 있다. raw pointer를 소유하고 있는 shared_ptr의 개수가 늘어날수록 raw pointer에 대한 참조 카운트가 증가한다. 4. week_ptr => raw pointer에 대한 소유권을 여러 개의 스마트 포인터 객체가 가질 수 있는 점..
C++ ofstream, localtime_s 함수, PSCP 1. C++ std::ofstream 을 사용할 때 파라미터로 보내는 string에 ':' 이 들어가면 동작을 안함.. ':' 쓰지 않는 string으로 넣어주어야 됨 2. localtime_s() 함수로 얻게 되는 time_t 시간 데이터는 월을 0 부터 계산한다. 그래서 time_t 객체의 tm_mon 변수에 +1을 해야 정상적인 '월' 값이 나온다. 3. pscp: Ubuntu 에서 Window로 파일 옮길 때 pscp로 파일을 다운로드 받을 수 있다. SSH 포트가 바뀌어있을 경우 -P 옵션으로 포트를 재지정해주어야 하며, 디렉토리를 복사할 경우 -r 옵션을 주어야 한다.
C++ CopyConstructible 1. CopyConstructible : 복사 생성가능 2. std::bind() 의 파라미터로 unique_ptr을 넘기면 에러가 뜬다. 파라미터로는 CopyConstructible 한 객체가 넘어와야 한다는 메시지였다. unique_ptr은 MoveConstructible과 MoveAssignable 속성은 가지고 있지만, CopyContructible과 CopyAssignable 속성은 가지고 있지 않기 때문이다. 반면, shared_ptr의 경우 CopyConstructible과 CopyAssignable 속성이 있기 때문에 std::bind()의 파라미터로 사용 가능하다. 그래서 unique_ptr로 선언된 변수를 shared_ptr로 선언한 후 빌드하니 정상적으로 컴파일이 완료되었다.