Thread/Windows 13

[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
반응형