[ubuntu] apt-get error
·
기타/ubuntu
[ubuntu] apt-get error우분투에서 apt-get을 실행할 때 다음과 같은 오류가 발생하는 경우가 있다.​xE: /var/lib/dpkg/lock 잠금 파일을 얻을 수 없습니다 - open (11: Resource temporarily unavailable)E: Unable to lock the administration directory (/var/lib/dpkg/), is anothers process using it?​E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)E: Unable to lock the administration directory (/var/lib/dpkg/) is..
[C++]inline 함수
·
Language/C C++
[C++]inline 함수기본적으로 함수 호출은 메모리상의 점프를 이용하며, 여러가지 상태 정보등을 저장하고 복원해야 하므로 내부적으로 복잡한 과정을 거친다. 프로그램이 실행되며 한줄씩 수행해 나가다가 함수 호출을 만나면 해당 함수의 메모리 영역으로 이동후 동작을 수행한다. 하지만 인라인 함수는 해당 함수 호출을 함수의 코 저체를 호출한 코드 위치로 모두 복사하여 대체한다. 따라서 함수 호출 단계가 줄어 복잡한 과정이 생략되므로 함수 동작 방식이 더 간단해지고 성능이 향상된다. 하지만 인라인함수가 항상 좋은것은 아니다. 인라인 함수는 코드를 대체하는 것이기 때문에 해당 함수를 호출하는 구문이 많아질 수록 실행 파일의 크기도 커진다. 호출 구문이 모두 함수의 정의로 바귀어서 전체 코드 양이 늘어나기 때문이..
[C/C++]std::mutex
·
Language/C C++
[C/C++]std::mutex멀티 쓰레드를 이용한 프로그램을 작성할 때 공유 자원의 관리에 주의해야한다. 여러 쓰레드가 동시에 같은 데이터를 변경할 경우 의도하지 않은 결과를 초래할 수 있다. 이런 멀티 쓰레드 환경에서 발생하는 문제점을 동기화 메커니즘으로 해결할 수 있다.먼저 동기화를 사용하지 않을 경우 발생하는 문제를 살펴보자.#include //std::thread #include //printf() using namespace std; int sum = 0; void Add(int cnt) { for (int i = 0; i < cnt; i++) { sum += 1; } } void Sub(int cnt) { for (int i = 0; i < cnt; i++) { sum -= 1; } } in..
[UnrealEngine]FPS 게임 만들기(8)
·
기타/UnrealEngine
[UnrealEngine]FPS 게임 만들기(8)이번에는 타겟의 파티클 효과를 넣어본다. Particle 폴더 생성 후 파티클 시스템을 추가한다. 이름은 HitTracePart로 했다. 파티클을 활성화하려면 먼저 머티리얼을 만들어야한다. Meterials 폴더 하위에 새로운 머티리얼을 생성한다. 그리고 편집기를 열어 다음과 같이 색상을 지정해준다. 이미터 탭 하위의 Required를 누르면 디테일 하위에서 머티리얼 지정할 수 있다. 이 머티리얼을 우리가 생성한 것으로 지정한다. 뷰포트가 다음과 같이 변경된 것을 확인할 수 있다. 이렇게 지정한 후 여러 설정을 변경하여 실감나게 만들어주어야한다. 이미터 하위의 Initial Size를 클릭하면 디테일 하위에 Size 탭이 나온다. 여기서 Distributi..
[C/C++] 소켓 프로그래밍
·
Language/C C++
[C/C++] 소켓 프로그래밍 오류윤성우의 열혈 TCP/IP 소켓 프로그래밍 책을 보고 소켓 통신을 실습할 때 코드를 그대로 쓰면 실행이 잘 안된다. 실행하며 나온 오류를 잡아봤다.환경 : Window10, visual studio 2015LNK2019 에러소스코드를 그대로 복붙하고 빌드하면 LNK2019에러가 나온다.#pragma comment(lib, "ws2_32.lib") 를 추가하면 빌드가 잘 되고 실행된다.클라이언트 연결도 안했는데 Accept 처리C++로 혼합개발할 경우 발생했던 문제이다. 원인은 #include을 포함하고 using namespace std를 썼을 때 생긴다. std::bind와 WinSock2의 bind의 이름 충돌로 발생한다. using namespace std 사용의 ..
[C/C++] const keyword
·
Language/C C++
[C/C++] const keywordconst 키워드를 적절히 사용할 수 있으면 유용하다. 코드 작성 중 발생할 수 있는 실수를 컴파일 단계에서 확인가능하기 때문에 활용하면 좋다. const의 개념은 간단하다. 이 키워드를 통해 선언되면 프로그램 실행 중 변경할 수 없음을 지정한다. 이를 통해 할 수 있는 기능 중 하나는 상수 지정이다. 상수를 지정하는 다른 방법은 #define을 이용하는 것이다. const는 #define보다 이점을 가지고 있다. 먼저 #define을 사용할 경우는 단순 대체만 수행하기 때문에 타입 확인을 할 수 없는 반면 const를 사용하면 컴파일러에서 확인이나 검사가 가능하다. 또한 const변수를 이용하면 디버거에서 변수를 이용할 수 있어 디버깅에 유용하다.포인터와 const..
[UnrealEngine]FPS 게임 만들기(7)
·
기타/UnrealEngine
[UnrealEngine]FPS 게임 만들기(7) 1. 머티리얼 만들기머티리얼은 여러 쉐이더가 통합된 편집 가능한 재질 정보 에셋이다. 언리얼 엔진으로 그리는 장면 대부분에서 사용되고, 3D 모델의 렌더링뿐만 아니라 사용자 인터페이스에도 이용된다. Material 폴더 생성 Matirials 폴더에 머티리얼 생성 편집기에서 열면 다음과 같이 보인다. 이렇게 생성한 머티리얼을 뷰포트에 드래그해도 아무런 일이 일어나지 않는다. 적용할 타겟에서 직접 설정해주어야 한다.뷰포트에서 적용할 타겟을 더블 클릭하여 선택한 후 우측의 디테일하위에 Matrials에서 바꿀 수 있다. 이렇게하면 하나씩 적용된다. 모든 타겟에 적용하려면 블루프린트 편집에서 뷰포트탭에서 Matirials를 수정하면 된다. 2. 머티리얼 설정생..
[UnrealEngine]FPS 게임 만들기(6)
·
기타/UnrealEngine
[UnrealEngine]FPS 게임 만들기(6)이전에 타겟을 맞추면 없어지고 점수가 추가되는 작업을 했다. 이제 타겟마다 값을 주어 보너스 점수나 감점을 할 수 있도록 변경한다. TargetBP에서 인티저타입의 TargetValue, HealthValue 변수를 추가한다. 먼저 Get TargetValue노드를 HandleUpdateScore노드에 연결한다. 그리고 기본값으로 50을 준다. 이렇게하면 타겟을 적중했을 때 값이 50씩 오르는 것을 확인할 수 있다. 변수 이름 우측의 버튼을 누르면 외부에서 수정이 가능해진다. 뷰포트에서 타겟을 클릭하고 디테일을 보면 Default에 우리가 만들었던 TargetValue와 HealthValue를 확인할 수 있다. 이 값들을 외부에서 접근 및 수정이 가능해졌다..