본문 바로가기

MS

Lock-Free Queue 출처 : http://serverprogramminggem.springnote.com/pages/940824Lock-Free Queue일반적인 방식의 Thread Safe Queue#include "ace/Thread_Mutex.h" template class NormalQueueT { private: int _size; ACE_Thread_Mutex _lock; // NODE데이타를 저장할 구조체 struct Node { T Data; Node *NextNode; }; Node* _mNode; // 노드 할당을 위해서 사용한다. Node* _nextNode; // 다음노드를 포인트한다. Node* _startNode; // 시작노드를 포인트한다. Node* _endNode; // 마지막노드를 포인트한다.. 더보기
D3DFont 성능 D3DXFont를 사용 하다가 글자 수와 Call 횟수가 많아 질 수록 Performance가 확연히 느려지는 현상이 있어 이것저것 자료를 찾아보다가 비교적 좋은 정보가 있어서 공유 합니다. Directx SDK를 설치하면 기본적으로 Sample에 있다는 CD3DFont인데 제가 설치한 Directx SDK(June, 2010) 버전에는 존재 하지 않아서, 구글링 하여 소스를 받아 두었습니다. D3DXFont를 사용 하는 것 보다 10배정도 빨라진 것 같은데요. (물론 저의 환경은 2D 이미지 처리를 다채널로 하는 거라 경우에 따라 측정 결과가 틀릴 수 있습니다만..) 상당히 괜찮은 것 같습니다. DirectX에서 d3d9xcore.h에 있는 기능들은 D3D9를 Customizing 하여 만든 거라서 P.. 더보기
DX Sprite 사용법 ID3DXSprite(이하 스프라이트) Interface는 다이렉트 엑스에서 2D이미지를 그리기 편하게 해주는 인터페이스 입니다. 주로 UI를 그리거나 하는 평면 이미지를 그릴때 사용하는데, 3D상의 카메라에 2D이미지가 붙어 있다고 생각하시면 편합니다. 카메라를 움직이면 3D공간의 물체는 이동하지만 카메라에 붙은 2D이미지는 변함이 없는 것이지요. 여기서는 이 유용한 스프라이트 객체의 사용법에 대하여 알아보겠습니다. 1. 스프라이트 객체 생성과 해제 // 생성하기LPD3DXSPRITE pSprite; D3DXCreateSprite(pd3dDevice, &pSprite); 스프라이트를 생성할때는 D3DXCreateSprite함수를 사용합니다. 함수를 간단히 살펴보면 HRESULT WINAPI D3DXCr.. 더보기
D3DXFont::DrawText 완전 느림... 겁나 느리다.. 초당 380fps정도밖에 출력 되지 않는 것 같다.. 물론 Text 개수와도 충분히 연관이 있다. 그래서 구글링 네이버년한테 검색을 좀 해봤는데 참고1 : http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_QnA_etc&page=4&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=1123 참고2 : http://www.gpgstudy.com/forum/viewtopic.php?t=1202 이런 내용들이.. 더 빠른 혹은 더 많은 기능을 가진 것을 원한다면 자체글꼴렌더러를 만들어도 됩니다만.... ID3DXFont자체는 그렇게 느리지 않습니다.... 우선....이걸 .. 더보기
ms에서 dirent.h파일 사용 하기 비주얼 스튜디오 2005 부터는 dirent.h 가 존재 하지 않는다. 리눅스에서 작성한 코드를 윈도우로 포팅할때 문제가 되는 부분이다.어지간하면 win32api 를 이용하는것이 좋은 방법이긴하지만 시간과 노력에 허덕이는 개발자들에겐 일일히 구현하기란 야근하고 퇴근해서 씻는것만큼이나 귀찮은 일이다. 일단 공개로 구현된 헤더가 존재하기에 링크. dirent-1.11.zip http://www.softagalleria.net/dirent.php 파일 링크:http://www.softagalleria.net/download/dirent/ 출처 : http://roughexistence.tistory.com/312 더보기
DirectDraw - SetClipper (2) 사실 Direct Draw Clipper는 상당히 쉬운 개념이지만... 나름대로 처음에 개념잡기는 힘든 편입니다. 흠... 일반적인 DirectX 관련 서적에 보면, Clipper 에 대한 부분은 클리퍼를 생성하는 함수만 달랑 제시해 놓고, 이걸 불러다 쓰면 되는거야! 라고만 합니다. Clipper 생성에 대한 자세한 내용은 독학으로 하시는 분들은 솔직히 얻기가 힘들죠. 뭐... 그렇다고 해서 Clipper가 어렵다는 것은 절대로 아닙니다. 단지 조금 난해한 구조체의 구조와 rcBound라는 것에 대한 개념이 초보 프로그래머들을 혼란스럽게 만드는 것이 가장큰 난관이죠. 후후... 초반부터 너무 겁주기 전법으로 나가는 것 같네요. 근데... 사실 알고보면 정말 정말 쉬워요^^; 자, 오늘은 직접 클리퍼를 .. 더보기
DirectDraw - SetClipper (1) Clipper의 필요성에 대해선 조금 그림을 통한 부가 설명이 필요 할 것 같아서 제가 이미지를 하나 또 준비했습니다. 하하^^; 자, 위 그림을 한번 보세요. 만약 위처럼 블리팅을 시도했다면, 화면에는 두더지가 반밖에 그려지지 않았겠죠. 그러나 사실 알고보면 메모리상에는 나머지 반의 부분도 존재합니다. 두더지 이미지의 사이즈는 총 11KB입니다. 그런데 딱 절반밖에 보이질 않으므로, 나머지 5.5KB는... 보이지도 않는데 괜히 메모리만 낭비하고 있는 셈이 되겠군요. 문제는 그것뿐이 아닙니다. 자, 두더지의 이미지 크기를 계산하기 쉽게 100*100이라고 생각해 봅시다. 블리팅을 할때, 1 픽셀을 그려주는데 1초가 걸린다고 치면... 100*100의 이미지를 그려주는데는 무려 10000초가 걸리게 됩니.. 더보기
SetThreadAffinityMask : 멀티 쓰레드 프로그래밍 기본 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 DWORD WINAPI ThreadProc(LPVOID arg) 8 { 9 while( *((bool *)arg) ) Sleep(0); 10 11 return 0; 12 } 13 14 int main() 15 { 16 SYSTEM_INFO info; 17 GetSystemInfo( &info ); 18 19 cout 더보기
리스트 컨트롤(CListCtrl) 안에 공용 컨트롤(CButton, CComboBox Control 등) 넣기 출처 : http://blog.naver.com/nanoteli?Redirect=Log&logNo=30109581803 1. 목적 수 많은 컨트롤을 줄을 맞춘 상태에서 다이얼로그 박스 안에 생성하고자 할 때 다이얼로그 박스의 공간이 부족할 수 있다. 따라서, 상하, 좌우 스크롤이 가능하고, 컨트롤들을 포함할 수 있는 별도의 컨트롤이 필요하다. 2. 구현 1) 위의 목적에 부합하는 컨트롤로서 리스트 컨트롤(CListCtrl)을 선택하고 파생시킨다. 2) LVS_REPORT, LVS_OWNERDRAWFIXED 속성을 주어 DrawItem 함수를 호출하도록 해준다. 3) DrawItem 함수를 재정의한다. 가. 고유 기능인 checkbox, icon을 표시할 수 있도록 나. text뿐만 아니라, control.. 더보기
ActiveX 제작시 Visat/Win7에서 주의해야 할 사항 출처 : http://yamoe.tistory.com/230 ActiveX 제작시 Windows Vista, Windows 7 에서 정상동작을 위해 신경써야 할 정보를 모아둡니다. UAC Elevation ActiveX에서 파일 쓰기 등의 작업을 한다면 권한 상승이 필요하며 권한 상승을 위한 코드는 아래 링크 참조. ATL ActiveX 만들기 - Part4. 관리자권한 UAC Elevation [참고] 포럼에서 해당 문제에 대해 논의된 글 Win7에서의 ActiveX 작동 문제 64bit OS에서 동작하는 ActiveX의 고려 사항 현재 보통은 기존에 32bit로 ActiveX가 제작되어 있는 상태에서 64bit OS에 동작하게 하려면 Internet Explorer 32bit 버전에서 실행시키면 된다.. 더보기