전체 글 354

[Thread] GetCurrentThread Function

스레드 내에서 현재 자신의 스레드 아이디를 구하기 위해서는 GetCurrentThreadId라는 함수를 사용하면 된다. 파라미터는 없으며, 리턴 값은 현재 실행되고 있는 스레드의 아이디를 반환해 준다. 마찬가지로 GetCurrentThread를 사용하면 현재 실행되는 스레드의 의사 핸들을 반환 받을 수 있다. Read more: http://www.jiniya.net/wp/archives/7194#ixzz29d9JwHJ2

Thread/Windows 2012.10.18

[Thread] DuplicateHandle 사용 팁

소켓핸들이 한개로 WSARecv로 수신대기중인 상태에서, WSASend로 데이터를 보내게 되면 WSARecv로 대기중이던게 취소됩니다. 이때 발생하는 에러가 님이 말씀하신 ERROR_OPERATION_ABORTED입니다.이 에러는 발생해도 끊어지거나 뭐 별다른 일은 일어나지 않습니다.아마도 데이터를 보낼려고 하는데, 그 핸들이 사용중이니까 일단 사용중인것을 취소하고 보내지 않나 싶네요하여간, 이 에러가 발생하지 않게 하기 위해서는 핸들을 2개 사용하면 되구요..WSADuplicateSocket 이나 DuplicateHandle 를 사용해서 복사해서 한개는 수신을 한개는 송신을 하면 됩니다. 저는 accept에서 발생한 핸들을 수신용으로, 복사해서 나온 핸들을 송신용으로 사용하고 있습니다. 새로운 핸들이 ..

Thread/Windows 2012.10.18

[Thread] DuplicateHandle함수

BOOL DuplicateHandle((1)HANDLE hSourceProcessHandle,(2)HANDLE hSourceHandle,(3)HANDLE hTargetProcessHandle,(4)LPHANDLE lpTargetHandle,(5)DWORD dwDesiredAccess,(6)BOOL bInheritHandle,(7)DWORD dwOptions); If the function fails, the return value is zero. (1)HANDLE hSourceProcessHandle : 복제할 핸들을 소유하는 프로세스를 지정. (2)HANDLE hSourceHandle : 복제할 핸들을 지정한다. (3)HANDLE hTargetProcessHandle : 복제된 핸들을 소유할 프로세스를..

Thread/Windows 2012.10.18

[Thread] __declspec(thread)

참조: http://kai127.springnote.com/pages/1775028 TLSThread Local Storage, 스레드마다 자신의 저장공간을 가진다. 각각의 스레드는 고유한 스택을 갖기 때문에 스택 변수( 지역 변수)는 스레드 별로 고유합니다. 예를 들어서 각각의 스레드가 같은 함수를 실행한다고 해도 그 함수에서 정의된 지역변수는 실제로 서로 다른 메모리 공간에 위치한다는 의미입니다. 그러나 정적 변수나 전역 변수의 경우에는 프로세스 내의 모든 스레드에 의해서 공유됩니다. TLS는 정적, 전역 변수를 각각의 스레드에게 독립적으로 만들어 주고 싶을 때 사용하는 것입니다. 다시 말해서, 분명히 같은 문장(context)을 실행하고 있지만 실제로는 스레드 별로 다른 주소공간을 상대로 작업하는 ..

Thread/Windows 2012.10.18

[스크랩][JAVA] Thread run()과 start()의 차이

출처 : http://blog.naver.com/zzooki/90035010576---------------------------------------------------------run()과 start() - 앞서 포스트에서 분명 일거리를 run()메소드 내에 정의해주었는데도 불구하고, 실제로 스레드에게 작업을 시킬 때에는 run()이 아닌 start()메소드를 통해 작업을 지시하였다. 왜???run()으로 작업지시를 하면 스레드가 일을 안하나?실제로 그렇진 않다..(아니..그렇다고 해야하나....?)간단히 말해 해당 스레드에게 run()메소드로 지시를 내려도 동일한 작업을 한다.하지만 그건 제대로 된 작업이 아니다. 이전 포스팅(JAVA의 메모리 구조)를 보면 Call Stack이란게 있다.바로 이..

Java 2012.10.17

[IOCP] 10038 Error

http://www.gpgstudy.com/forum/viewtopic.php?p=27737 에서 해결방법을 찾았다. WSASend() 함수 호출 시 에러 코드 10038이 리턴되면서 리시브 에러를 출력할 때가 있는데,WSASend()함수 호출 전에 ZeroMemory(&m_overlapped, sizeof(OVERLAPPED)); 로 데이터를 한번씩 지워주자. 나는 멤버변수로 다루고 있었으므로 계속 이전 데이터가 저장되어 있다. 그리고 원래 소켓 에러 10038은 소켓 핸들이 잘못된 값으로 변경되었을 때, closesocket()으로 연결을 해제할 시에 나는 에러다.에러를 확인할 방법은 딱히 없고, closesocket을 하기 전에소켓이 INVALID_SOCKET인지 아닌지 확인을 하면 된다.

Network/Windows 2012.10.06

[Unity3D] 포물선 이동

x = S.x + V.x * t; y = S.y + (V.y * t) - ((1/2) * g * t * t); z = S.z + V.z * t; t = 시간S = 시작위치g = 중력 가속도v = 속도 이걸 이용해서 하면 된다.만약 특정 시간동안 포물선으로 원하는 최종위치까지 이동하고 싶다면,특정 시간을 t에 대입, 최종 위치를 x, y, z에 대입한 후속도 V를 구한다.속도를 구했으면 시간에 따른 위치를 구하면 된다. 그리고 게임을 개발할 때는, 단위를 잘 정해 놓아야 한다. 그래야 물리식 계산에 있어서 꼬이지 않는다.보통 3D게임에서는 1을 1미터로 두고 게임을 제작한다.

게임/Unity3D 2012.09.27

[C#] ArrayList 와 List 차이

C#을 하다 보면 당연히 아는 정보이겠지만.. 그래도 일단 적어 놓아야 겠다. ArrayList는 C# 객체들이 상속받는 최상위 클래스인 Object클래스를 데이터로 받는다. 이는 캐스팅을 해서 써야 한다는 뜻인데, 캐스팅을 자주 하는 것은 성능 저하에 한몫 한다고 한다. 하지만 List는 C++의 템플릿 처럼 미리 어떤 데이터 형식을 받을 것인지 지정해 둔다. 그렇기 때문에 캐스팅을 해서 쓸 필요가 없다.

C# 2012.09.27
반응형