본문 바로가기

쓰레드별 전역변수 사용하기 쓰레드별 전역변수 사용하기? 무슨말? 각각 쓰레드에서 같은 변수를 액세스하지만, 쓰레드 별로 서로 다른 값을 사용하는 형태입니다. 말이 정말 어렵습니다. 즉, 전역 변수로 total이 있고 쓰레드A와 쓰레드 B에서 같이 사용한다면 문제가 발생합니다. 각 쓰레드 내에서는 total만 가져오는 쓰레드 내에서만 계산된 값을 사용하려고합니다. 그렇게 한다면 전체 로직이 쓰레드 별 total를 구분(thread_a_total, thread_b_total)할 필요 없이 하나만 사용하기 때문에 로직도 깔끔해집니다. 그리고 쓰레드 간에 충돌도 없어지게 됩니다. 이렇게 해도 이해하기 어렵군요. 아무든 전역 변수가 프로세스 하나에서 공용으로 사용하지만, 쓰레드별 변수는 해당 쓰레드 내에서만 공용으로 사용하고 다른 쓰레드에.. 더보기
VC에서 윈도우 에러메시지 윈도우에서 에러 코드는 얻는 함수는 GetLastError()이다. 이함수를 사용하여 얻는 값는 숫자로 되어 있다. 숫자로만은 어떤 에러인지 알수 없다. 물론 구글링하면 되겠지만, 번거롭다. 또는 에러 코드마다 에러메시지 생성을 해주어야 하는 귀찮은 일이 생긴다. 이를 간단하게 해결할 수 있는 방법이 에러 코드를 이용해서 자동으로 에러 메시지를 생성하는 것이다. 이를 위한 win32 api가 FormatMessage()가 있다. CString ErrorString(DWORD err) { std::ostringstrm ostm; LPTSTR s; if(::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,.. 더보기
VC에서 운영체제별 매크로 선언 작성일: 2009.05.15 (http://ospace.tistory.com/), ospace114@엠팔.컴 VC에서 운영체제별 호환 프로그램을 작성시 꼭 필요한 전처리기 선언해야한다. 보통 일반적으로 전처리기 사용하지 않으면 현재 컴파일되는 윈도우 버전이 선언된다. 사용되는 매크로는 다음과 같다. WINVER 윈도우 버전을 사용한다. 현재 사용되는 윈도우 버전을 말한다. 0x410은 major 버전은 4이고 minor는 10이다. 즉 Windows 98 이전을 말한다.` _WIN32_WINDOWS 앞의 WINVER도 같은 의미이다. `0x410이면 앞의 Windows 98과 같다. _WIN32_WINNT Windows NT 버전을 가리킨다. 만약 Windows ME 이전이라면 선언하면 안된다. `0x4.. 더보기
Win32 NIC 인터페이스 정보 얻기 작성일: 2009.04.21 (http://ospace.tistory.com/), ospace114@엠팔.컴 인터페이스 관련 API API 명 Flatform 설명 비고 GetFriendlyIfIndex Win98 이상/NT sp4 이상 인터페이스 인덱스 받아서 하위호환된 인터페이스 인덱스를 반환. 24비트 이하로된 값. GetIfEntry Win98 이상/NT sp4 이상 특정 인터페이스 정보를 획득. GetIfTable Win98 이상/NT sp4 이상 MIB-II 인터페이스 테이블를 획득. GetIfEntry에서 각각 인터페이스 목록을 가져옴. GetInterfaceInfo Win98 이상/Win 2k 이상 인터페이스 목록을 얻음. GetNumberOfInterfaces Win98 이상/NT sp4.. 더보기
프로그램 버전 얻기 파일 버전을 얻는 프로그램이다. 작성일: 2009.04.13 (http://ospace.tistory.com/), ospace114@엠팔.컴 사용법은 다음과 같다. // 현재 수행되는 프로그램이나 DLL 의 정보 CFileVersion fv; if(!fv.update()) { // error } cout 더보기
디버깅툴 dbgview dbgview는 sysinternals에서 만든 아주 유명한 툴이다. 지금은 M$에 소속되어 있다. dbgview는 디버깅 메시지를 보여주는 프로그램이다. 그렇다고 해서 debug모드에서만 보이는 것이 아니라 releas에서도 다음과 같은 API를 사용하면 메시지가 보인다. Writer: http://ospace.tistory.com/(ospace114@empal.com) 2008.08.13 디버깅 메시지 생성하는 API 아래는 M$ 홈페이지에서 추출한 내용이다. Under Windows 95, 98, and Me _DebugView_ will capture output from the following sources: - Win32 **OutputDebugString** - Win16 **OutputD.. 더보기
Registry(레지스트리) 변경을 감시하여 이벤트 처리하기 이는 레지스트리 변경음 감시하여 Notify를 해주는 기능을 구현하다. 아래 구현은 Win32에 기반을 두었고, 콘솔 프로젝트 하에서 테스트를 하였다. http://ospace.tistory.com/(ospace114@empal.com) 2008.08.07 주요 API 사용 주요 API는 다음과 같다. 레지스트리 관련 RegOpenKeyEx(): 특정 레지스트리 키를 열기위해서 사용(KEY_NOTIFY플래그 반드시 사용) RegNotifyChangeKeyValue(): 앞에서 열려진 키값을 Notify하기 위해 사용 RegCloseKey() 기타 CreateEvent(): Notify에 사용할 이벤트 핸들러 CloseHandle(): 열려진 핸들러 닫기 WaitForSingleObject(): 특정 핸들.. 더보기
디버거 - 로그 윈도우 2.5 (Win32 디버그 지원) 출처 : http://www.devpia.com/Forum/BoardView.aspx?no=3791&ref=3791&page=6&forumname=TOP_PDS&stype=VCF&KeyW=%b7%ce%b1%d7&KeyR=titlecontent 얼마전 로그 윈도우 2.1 바이너리를 공개한 김일수입니다. Win32 디버그를 지원하도록 버전업된 로그 윈도우 2.5를 다시 공개합니다. 로그 윈도우 2.5의 제작에 관하여… 2000년 12월 29일, 김 일 수 제가 모바일 멀티미디어 업체에서 서버를 개발하고 있는동안 로그 윈도우 의 여러가지 개선되어야 할 점들을 알게되었습니다. 첫번째 휠 마우스의 지원이었고 두번째 Win32 디버깅을 지원하는 것입니다. 어떤 분이 VB에서 로그 윈도우를 어떻게 사용해야 하는가를 .. 더보기

반응형