목록Development Experience (82)
KorSA
1. 다른 프로젝트에 선언된 클래스를 테스트하려 했는데 LNK2019 에러가 발생하였다. 헤더는 어찌저찌 상대 경로를 찾아서 넣었는데 결국 실제 정의를 못 찾기 때문에 문제가 된다고 한다. (by 구글느님) 2. 테스트 프로젝트를 따로 만들어서 테스트 관련 작업을 하려고 했는데 그냥 기존 프로젝트에서 테스트 클래스를 하나 만드는 방식으로 변경해서 테스트를 진행하였다.
[ 증상 ] 영상 frame streaming에서 원형 큐를 사용하여 frame을 관리하고 있었다. frame이 Queue의 size만큼 수신되면 원형 큐는 가득차게 되는데, 다음 frame을 받기 위해 나는 Queue에 존재하는 맨 처음 frame과 맨 마지막 frame의 시간 차가 일정 간격(period A라 하자)이상 차이가 나면 맨 앞의 frame을 버리는 정책을 취하였다. 하지만 이 과정에서 한 가지 버그가 발생하였는데, 이는 Queue에 frame이 가득차는 시간이 period A 보다 짧게 걸릴 경우, 맨 앞의 frame은 절대 버려지지 않는 것이었다. 이로 인해 새로 수신되는 frame들도 꽉찬 Queue에 들어가지 못하는 현상이 발생하였다. [ 해결 ] 그래서 나는 매 frame을 수신할..
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에 대한 소유권을 여러 개의 스마트 포인터 객체가 가질 수 있는 점..
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 옵션을 주어야 한다.
1. CopyConstructible : 복사 생성가능 2. std::bind() 의 파라미터로 unique_ptr을 넘기면 에러가 뜬다. 파라미터로는 CopyConstructible 한 객체가 넘어와야 한다는 메시지였다. unique_ptr은 MoveConstructible과 MoveAssignable 속성은 가지고 있지만, CopyContructible과 CopyAssignable 속성은 가지고 있지 않기 때문이다. 반면, shared_ptr의 경우 CopyConstructible과 CopyAssignable 속성이 있기 때문에 std::bind()의 파라미터로 사용 가능하다. 그래서 unique_ptr로 선언된 변수를 shared_ptr로 선언한 후 빌드하니 정상적으로 컴파일이 완료되었다.
회사 프로젝트를 수행하던 중 트리 구조의 자료 구조에서 depth 1의 노드들 따로, depth 2의 노드들 따로 두 개의 UI 컴포넌트에 각각 바인딩할 일이 있었다. 나는 별 고민없이 DropDownList 의 DataSource에 depth 1의 노드들을 바인딩하였고, GridView의 dataSource에는 depth 2의 노드들을 바인딩하였다. depth 1 의 노드들과 depth 2의 노드들은 모두 한 Instance 안에 존재하였다. 초반엔 문제가 없었는데, GridView의 DataSource만 따로 조작해야 할 상황이 생기자 문제가 발생하였다. 나는 GridView에서만 Refresh를 하고 싶었는데, depth 2의 노드들을 Refresh 하고 나니 DropDownList에 바인딩되었던 ..
C# Winform을 사용한 프로젝트에서 DropDownList의 SelectedIndex 이벤트를 상황에 맞게 조절해야 할 필요성이 있었다. 사용자가 DropDownList 에서 현재 선택된 아이템이 아닌 다른 아이템을 선택할 경우, 기존 데이터가 지워진다는 메시지 팝업을 띄워주어야 했다. 처음엔 기존에 사용하던 SelectedIndexChanged 이벤트 핸들러에서 이 메시지 팝업을 띄워주려 했다. 하지만 여기서 팝업을 띄우다보니, 사용자가 기존 데이터를 지우고 싶어하지 않는 경우에도 DropDownList의 Index가 바뀌어 버리는 것이었다. SelectedIndex 이벤트가 실행되는 걸 멈추기 위해 argument로 받은 이벤트 변수 e 의 e.Cancel을 true로 하고자 했으나 Cancel..
참고> https://skensita.tistory.com/entry/HeapAlloc-LocalAlloc-GlobalAlloc-%EA%B0%81%EA%B0%81-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8B%A4%EB%A5%B8%EA%B0%80 1. Win16 운영체제에서는 프로그램마다 가지는 Local Heap과 Heap Manager가 가지는 Global Heap이 따로 존재했지만 Win32 운영체제에서는 따로 존재하지 않음. 즉, Win32 운영체제에서는 Local Heap과 Global Heap이 동일하고 이말인 즉슨 LocalAlloc과 GlobalAlloc이 동일함을 의미 2. LocalAlloc은 어플리케이션의 Default Heap에 메모리를 할당함. Default Hea..
ToLocalTime() => 한국이면 Utc + 9가 적용됨 ToUniversalTime() => 어느 나라에 있든 UTC 기준시로 바뀜, ToLocalTime()의 반대 역할
외부에서 Windows 운영체제의 탐색기를 활용하여 회사 내부망에 있는 FTP 서버에 접속하려고 했더니 (물론 외부와 내부를 연결해주는 게이트웨이로 접속한 것이다.) "FTP 서버에서 폴더를 여는 동안 오류가 발생했습니다. 이 폴더를 액세스할 권한이 있는지 확인하십시오. 자세히: 200 Switching to ASCII mode. 227 Entering Passive Mode " 라는 에러가 떳다. 구글링해보니 [ Intenet Explorer 에서 인터넷 옵션> 고급 탭 > "방화벽 및 DSL 모뎀과 호환되는 수동 FTP 사용" 체크 해제 ] 위의 방법을 사용하라고 나왔다. 이 방법을 사용하니 "500 Illegal port command" 라는 에러가 떳다. 이유인 즉슨, FTP 서버 접속에는 두 가..