[Unity] Visual Studio Unity 자동완성 안될때
2023. 1. 2. 18:18
Development/etc
가끔가다 Visual Studio에서 Unity Script를 작성할때 자동완성(intellisense)이 안먹힐때가 있다. 예전에도 봤던 방법이지만 까먹어서 해결하는 방법을 적어 놓으려고 한다. Unity 메뉴에서 Edit -> Preferences 탭을 클릭한다. Preferences창에서 External Tools탭을 누르고, External Script Editor를 눌러서 Visual Studio를 선택한다. 위의 방식대로 하게되면 자동완성(intellisense)이 잘 동작한다.
VirtualBox <-> PC 복붙 안될 때 해결방법
2022. 12. 27. 16:49
Development/etc
보통 VirtualBox 와 Host PC간 클립보드 공유가 안될때의 해결방법은 아래와 같다. 1. 장치 -> 클립보드 공유 탭 -> 양방향으로 설정 한 뒤 복붙이 되는지 확인한다. 2. 위의 방법이 안될 경우 장치 -> 게스트 확장 CD 이미지 삽입을 눌러 과정을 진행한 뒤 다시 확인한다. 3. 위의 과정들을 진행했는데도 안될 경우 아래의 방법을 진행하면 대부분 될 것이다. 우선 VBox clipboard process가 살아있는지 확인한다. 명령어는 ps -ef | grep -i vbox 로 확인하면 된다. ps -ef | grep -i vbox 살아있는 경우도 빨간색으로 동그라미친 부분이 나타나지 않는 경우도 존재한다. 해당 프로세스가 없는 경우는 넘어간다. 살아있는 경우 프로세스를 죽였다가 다시 ..
[C#] - C# 멀티쓰레드 사용법 - Thread
2022. 12. 26. 21:38
Development/C#
오늘은 C#으로 Thread를 사용하는 방법에 대해 정리해보려고 한다. Thread 함수 사용 using System.Threading을 선언해야한다. Thread 함수를 이용하여 멀티쓰레드를 이용 할 수 있다. 우선 쓰레드에서 수행할 함수를 작성해야한다. 위에선 MainThread 함수 부분이다. 쓰레드를 사용하기 위해서 Thread t = new Thread(수행할 동작을 포함하는 함수 = MainThread)로 Thread 객체를 생성한다. 그 뒤 t.Start()를 통해 해당 쓰레드의 동작을 시작하면 된다. 위에 부수적인 기능들이 있는데 그부분을 설명하자면 1.t.Name t.Name 을 통해 Thread의 이름을 설정 할 수 있다. 설정한 이름은 아래와 같이 확인 할 수 있다. 2. t.isBa..
SourceTree : Invalid username or password Error 관련
2022. 10. 20. 23:05
Development/etc
SourceTree를 사용하여 Push할때 발생하는 에러인 Invalid username or password Error에 대해 해결 방법을 찾아서 블로그를 작성한다. Push 할때 아래와 같은 창이 뜨면서 에러가 발생하는 경우가 있다. 이런 에러가 발생하는 이유는 아이디나 비밀번호를 잘못 입력해서인데, SourceTree는 굉장히 불친절하게도 한번 입력하면 다시 비밀번호를 입력하는 창이 발생하지 않는다. 이럴때는 SourceTree의 인증정보를 찾아서 삭제해주고 다시 푸쉬를 하면 비밀번호 입력하는 창이 다시 발생한다. 비밀번호를 계속 틀리면 계속 삭제하고 다시 인증하면 된다. 해당 파일은 아래의 경로에 있다. C:\Users\username\AppData\Local\Atlassian\SourceTree..
[C++] Lock(std::lock_guard, std::unique_lock)
2022. 10. 14. 01:37
Development/C++
저번 포스트에서 멀티 쓰레드 프로그래밍시 race condition에 의해 공유 자원을 사용하는 critical section에 자원을 동시에 접근했을때 문제가 생기는것을 알아보았다. 이런 상황을 방지할 때 사용할 수 있는 mutex라는것에 대해서도 알아보았다. 이번 포스트에서는 아래와 같은 것에 대해 공부해보고자 한다. 1. mutex.lock()을 걸어두고, mutex.unlock()을 해주지 않았을때 어떠한 문제가 발생하는지 2. 위의 문제를 방지하기 위한 유용한 것들 mutex unlock을 해주지 않았을때 발생하는 문제점 저번 포스트에서 mutex를 공용 화장실에 자물쇠에 비유했었다. 동일하게 mutex를 자물쇠라고 생각했을때, lock()을 한 상황은 어떤 한 사람이 화장실에 들어가서 문을 잠..
[C++] Mutex
2022. 10. 8. 01:28
Development/C++
이전 포스트에서 std::thread를 이용하여 멀티 스레드를 사용해보았다. 포스트의 마지막에 말했던 멀티 스레드 프로그래밍을 하면서 주의해야 할 점에 대해 알아보려고 한다. thread를 처음 사용시 예상하지 못하는 문제점 우선, thread는 process와 다르게 스택 메모리를 제외한 나머지 힙, 코드, 데이터 영역을 공유한다. 아래와 같은 코드를 작성하고 출력되는 결과를 한번 예상해보자. #include #include #include using namespace std; int num; void addNum() { num++; } int main() { vector vThread; for(int i = 0; i < 5; i++) { vThread.push_back(thread([]() { for..
[C++] Process와 thread
2022. 10. 5. 23:34
Development/C++
오늘은 thread에 대해 알아보도록 하겠다. 스레드(thread)란 ? 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하고, 작업을 수행한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 두개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다. 프로세스(Process) 란? 간단하게 말하면 실행 중인 프로그램이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다. 프로세스와 스레드의 차이 우선 가장 큰 차이점으로 메모리 공유여부에 대한 부분이 다르다. 프로세스..
멀티프로세싱, 멀티쓰레딩, 멀티플렉싱
2022. 10. 3. 23:35
Development/Network
운영체제 및 프로그래밍을 공부하다보면 자주 사용되는 멀티프로세싱, 멀티쓰레딩, 멀티플렉싱과 같은 단어와 각각의 장단점들에 대해 잘 정리되어있는 내용들을 모아봤다. 멀티플렉싱이란? 여러명이서 통신할때 하나의 채널만 가지고 통신하는 방식을 말한다. 멀티쓰레드, 멀티 프로세스가 여러 채널을 만들어 통신한다면 멀티플렉싱은 하나의 프로세스, 스레드를 가지고 여러 명의 통신을 연결시킨다. 여러명이 접속할 수 있는 서버를 만들기 위해 여러 IO모델들이 사용된다. 오늘은 대표적인 멀티플렉싱 방식의 IO 모델인 select에 대해 살펴보고자 한다. 1. select 동작 과정 서버는 여러 클라이언트의 접속을 받는다. 그 후 각 클라이언트의 이벤트(데이터 수신여부, 데이터 송신가능 여부, 오류 수신 여부 등)의 이벤트가 ..
[Windows Socket] - Client
2022. 9. 8. 13:55
Development/Network
이번엔 Winsock을 사용하여 Clinet를 간단하게 만들어 볼 생각이다. 지난번 작성한 Server 코드에 비하면 굉장히 간단하다. Client 프로그램을 만드는 순서는 아래와 같다. Winsock을 초기화합니다. 소켓을 만듭니다. 서버에 연결합니다. 데이터를 보내고 받습니다. 연결 끊기를 선택합니다. Server를 만드는 부분에서 bind, listen, accept과 같은 부분들이 빠져있다. Client 소켓을 생성하고 연결 할 IP,Port등을 통해 연결을 시도하면 된다. 1,2,4,5번은 이 전 포스트와 동일하므로 생략하도록 하겠다. 서버에 연결합니다. 우선 연결할 Socket 하나를 생성한다. 접속 요청할 소켓의 정보(address family, IP, Port)를 SOCKADDR_IN 구조..
[Windows Socket] - Server
2022. 9. 8. 13:14
Development/Network
오늘은 지난 포스트에 이어서 Winsock을 사용하여 간단한 server를 만들어보려고 한다. 지난 포스트에서 서버는 아래와 같은 절차가 있다고 언급했다. Winsock을 초기화합니다. 소켓을 만듭니다. 소켓을 바인딩합니다. 클라이언트에 대한 소켓에서 수신 대기합니다. 클라이언트에서 연결을 수락합니다. 데이터를 수신하고 보냅니다. 연결 끊기를 선택합니다. 위와 같은 순서로 한번 만들어 보려고 한다. Winsock을 초기화합니다. 우선 헤더 파일 및 lib 파일과 연결한다. Winsock 초기화에 대한 부분은 저번 포스트에서 다뤘으니 넘어가도록 하겠다. #include #include #include #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsa..
[Windows Socket] - 시작하기
2022. 9. 8. 11:08
Development/Network
Windows Socket Programming Windows 환경에서 소켓프로그래밍을 공부해보려고 한다. 네트워크 소켓(network socket)은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점이다. 오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하고 있으므로, 대부분의 네트워크 소켓은 인터넷 소켓이다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다. 아래와 같은 요소들로 구성되어있다. 인터넷 프로토콜 (TCP, UDP, raw IP) 로컬 IP 주소 로컬 포트 원격 IP 주소 원격 포트 리눅스에서의 소켓 프로그래밍과 거의 동일하다. 하지만 몇가지 더 해줘야 하는것들이 있고, 함수명이 좀 다른 것들이 있다. 우선, 서버와 클라이언트를..
vi 에디터 tab 간격 설정
2022. 8. 4. 10:52
Development/etc
vi 에디터의 tab 간격을 바꿔보자. 기존에 작성되어 있던 코드를 수정할때 vi 에디터를 가끔 사용 할 때가 있다. 이 때 tab을 누르면 간격이 기존 코드의 간격과 다르게 되어 곤란했던 경험어 있다. 간단한 파일을 추가/변경으로 인하여 탭 간격을 설정 할 수 있다. Tab 간격 변경 #사용자의 홈 디렉토리로 이동한다. cd ~/ # .exrc 파일이 없다면 생성 될 것이고, 있다면 수정하면 된다. vi .exrc # .exrc 파일이 열렸다면 아래의 코드를 추가해준다. set ts=4 # 여기서 설정한 4는 tab의 간격을 4로 설정한것이다. # 개행 후 자동으로 윗줄에 맞춰 들여쓰기 하는 옵션도 있다. set ai