QFE : VS2010: VC++: 64 bit VC++ compiler (cl.exe) causes error C1001

헬마입니다.

VS 2010 SP1 에서 64비트 C++ 컴파일러를 사용할 때 C1001 오류가 발생하는 문제를 수정해준다고 하네요.

자세한 정보는 아래 사이트를 참조하세요

http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=43673

 

VS10SP1-KB2685649-x86

Total Commander – H.M – Build 118

헬마입니다.

토탈커맨더가 드디어 8.0 RC 버전으로 진입했습니다.

RC 버전은 과연 숫자가 몇 까지 올라갈 것인지 사뭇 궁금하네요.

이버 버전은 토탈 커맨더 버전업과 SynWrite 버전업이 전부입니다.

SynWrite 는 미약하나마 한글화를 시작했습니다. 아직 완료가 되지 않았구요, 몇 번의 버전업을 거치면 가능할 듯 싶네요. ( SynWrite 측에서 추천하는 기본 번역도구가 -인간적-으로 너무 형편없어서, 심히 짜증이 좀 나는 상태라서요 ㅎㅎ )

 

TotalCMDforInno_B118

Total Commander – H.M – Build 117

헬마입니다.

 

그간 서버를 정리하느라 많은 시간 서버를 내려놨었습니다.  nginX 서버로 교체하려다 부실한 윈도 지원에 좌절하고 IIS 로 해보려다 IIS 의 소켓 풀링을 극복하지 못하고 돌아돌아 아파치로 돌아왔네요.

빌드 117

* Total Commander 8.0 Beta 25
* TC Torrents 2.0.2
* ISO 1.7.7 Beta 4
* SynWrite 3.4.1035

빌드 116
* Total Commander 8.0 Beta 23
* SynWrite 3.3.840
* Ultra TC Editor 6.10 Beta 2

TotalCommander – H.M – Build. 117

중첩된 I/O (OVERLAPPED I/O) 사용시 몇 가지 유념할 사항들…

안녕하세요 헬마입니다.

이번에 네임드 파이프에 관련된 클래스를 작성하면서 속도 개선을 위해 중첩된 I/O 를 사용했는데 덕분에 며칠을 삽질했습니다. 중첩된 I/O 에 대해 혼란스러웠던 몇 가지를 확실히 정리할 수 있었네요. 그에 대한 간단한 글을 남겨봅니다.

윈도는 기본적으로 동기/비동기 입출력을 모두 지원합니다. 먼저 동기 입출력은 정말 간단합니다. 함수를 호출하면 완료되었을 때 (성공/실패 ) 를 가지고 반환합니다. 참 알기쉽습니다. 누구나 쓸 수 있습니다. 두번째로 비동기 입출력을 지원하는데 윈도는 비동기 입출력 방법으로 몇 가지를 제공합니다. 그중에서 이번엔 OVERLAPPED I/O 라는 녀석을 다뤄볼까 합니다.

OVERLAPPED I/O 라는건 이름 그대로 어떠한 장치/파일 등에 대한 입출력 작업이 동시에 여러개가 진행될 수 있다는 뜻으로 지어진 이름입니다.

아래와 같은 구조체를 사용합니다.

typedef struct _OVERLAPPED {
    ULONG_PTR Internal;
    ULONG_PTR InternalHigh;
    union {
        struct {
            DWORD Offset;
            DWORD OffsetHigh;
        };

        PVOID Pointer;
    };

    HANDLE hEvent;

} OVERLAPPED, *LPOVERLAPPED;

위의 구조체를 사용해서 비동기 입출력을 사용하는 방법은 크게 2 가지인데 하나는 ReadFile/WriteFile 함수를 사용하는 것이고 다른 하나는 비동기 입출력 전용으로 설계된 ReadFileEx/WriteFileEx 를 사용하는 것 입니다.

ReadFile/WriteFile 함수를 이용해 비동기 입출력을 진행하면 직접 지속적으로 작업상태를 점검해야합니다. 다음과 같은 GetOverlappedResult 함수를 이용해서 말이죠. 다른 작업을 하면서 이러한 함수를 호출해서 별도로 작업상태를 점검한다는건 사실 매우 귀찮은 일이라 콜백함수를 호출받을 수 있는 ReadFileEx/WriteFileEx 를 주로 찾아보게 됩니다.

저도 같은 이유로 ReadFileEx/WriteFilEx 를 사용하기로 결정했고 그 뒤로 연이은 삽질이 시작되었습니다. ㅠㅠ

이때 온전히! 편안히! 완료 통지를 콜백함수를 통해 받으려면 주의해야할 사항이 몇가지 있습니다.

1. 윈도 커널은 해당 작업을 수행한 후 완료 통지를 즉시 하지 않고 ReadFileEx/WriteFileEx 를 **호출한 스레드** 의 APC Queue 에 완료 통지할 목록을 넣습니다. 따라서 콜백 통지가 오기전에 호출한 스레드가 종료되면 통지는 오지 않습니다. ㅠㅠ

예를 들어, 아래와 같이 코드를 작성하면 통지는 오지 않습니다.

auto workThread = boost::thread(
    [&]()
    {
        OVERLAPPED ovlp;
        ZeroMemory( &ovlp, sizeof(ovlp) );

        WriteFileEx( hFile, pBuffer, dwBufferSize, &ovlp, ABC::IOCompletionRoutine );
    }
);

위와같이 하면 WriteFileEx 가 호출되는 즉시 해당 스레드가 종료되기 때문에 통지는 오지 않습니다.

2. 윈도 커널은 위에서 적은 바와 같이 완료 통지를 즉시 하지 않고 호출한 스레드의 APC Queue 에 넣는다고 했습니다. 그렇다면, 도대체 윈도 커널은 언제 해당 대기열에서 꺼내서 통지를 해주느냐입니다. 이 때는 해당 스레드가 **대기 상태( waitable state )** 에 들어갔을 때 입니다. 대기 상태란 해당 스레드가 코드를 수행하지 않고 커널에게 지금 통지 받을 준비가 되었다고 알린 상태입니다. 이 상태일때만 커널은 통지를 수행합니다.

그렇다면, 호출 스레드는 어떻게 대기가능 상태로 들어가느냐입니다.

ㄱ). SleepEx 함수에서 2번째 인자를 TRUE 로 주었을 때 ( Sleep 으로는 통지 받을 수 없습니다!! )

ㄴ). WaitForSingleObjectEx 함수 사용 ( 역시 WaitForSingleObject 로는 통지 받을 수 없습니다!! )

ㄷ). WaitForMultipleObjecttEx 함수 사용 ( 역시 WaitForMultipleObject 로는 통지 받을 수 없습니다!! )

…. 등등의 함수가 있습니다.

따라서, 만약 대화 상자 기반의 응용 프로그램에서 아래와 같이 버튼등의 UI 핸들러에서 호출한다면 통지 받을 수 없습니다.

void CDlgBasedProgram::OnButtionClick()
{
    OVERLAPPED ovlp;
    ZeroMemory( &ovlp, sizeof(ovlp) );

    WriteFileEx( hFile, pBuffer, dwBufferSize, &ovlp, CDlgBasedProgram::IOCompletionRoutine );
}

위와 같이 호출하면 위 핸들러를 호출한 UI 스레드는 대기 상태로 들어가지 않기 때문에 통지를 받을 수 없습니다.

3. 또한 CreateFile 에서 핸들을 생성할 때 FILE_FLAG_OVERLAPPED 를 사용하여 비동기 입출력을 사용하겠다고 했다면, 일관되게 비동기 입출력을 해야합니다. 섞어서 사용하면 올바른 결과를 던져주지 않습니다.

 

 

Total Commander – H.M – Build 115

헬마입니다.

 

오랜만에 토탈 커맨더 버전업하였습니다. 토탈 커맨더 8.0 이 베타 30은 가려나 봅니다.

빌드 115

           * Total Commander 8.0 Beta 21

           * SynWrite 3.1.680

           * Imagine 1.0.9 – 2012-02-14 -

           * UnArkWCX 0.8

           + ISO 1.7.4 Beta 1 x64

           * DiskInternals Reader for TC 1.6.3.0

           * Universal Viewer Pro 6.3.0.0

           * 32비트 윈도에서 설치시에 오류가 발생하는 문제 수정

TotalCMDforInno_B115

UnArkWCX_0_8

Total Commander – H.M – Build 114

헬마입니다.

토탈 커맨더가 베타17a 까지 올라왔습니다. 20은 채우지 않을까 싶습니다.

SynWrite 가 광속 버전업을 진행중입니다. 점점 임시적으로 쓰이는 간편한 편집기를 벗어나 다양한 기능을 갖추어가네요.

TotalCMDforInno_B114

XIAOMI Mi-One 과 SAMSUNG Galaxy Note 카메라 비교

헬마입니다.

 

아무래도 저의 주력이 갤럭시 노트 (해외판 GT-N7000 입니다) 이다 보니 해당모델과 사용하면서 자꾸 비교를 하게 됩니다.

이번에는 두 모델의 카메라 성능을 잠깐 사진 몇장으로 날림 비교를 해보려 합니다. 사실 전 카메라나 사진같은거 잘 모릅니다. 걍 단순히 초점만 띡 눌러서 찍고는 잘 나왔네 하는 정도지요 ^^

두 기종의 카메라 성능은 둘 다 8Mega Pixel 입니다. 이미지 품질은 둘다 최대, 8메가 픽셀로 설정했습니다

먼저 갤럭시 노트로 촬영한 제 방 책장 사진입니다. 기본설정으로 단순히 촬영했습니다.

이번엔 Mi-One Plus 로 촬영한 책장 사진입니다.

개인적인 느낌으로는 갤럭시 노트의 촬영 결과가 훨씬 마음에 듭니다.

 

이번엔 서점에서 둘러보던 중 맘에 들던 책을 발견하여 갤럭시 노트로 촬영했습니다.

이번엔 Mi-One Plus 로 촬영한 사진입니다. Mi-One Plus 는 첫번째는 기본설정인 밝기(노출?) 중간인 사진이고 너무 어둡다 싶어서 최대로 올리고 하나 더 촬영했습니다.

 

개인적 느낌 : 사진 이미지 파일의 크기는 Mi-One Plus 가 더 크지만 맘에 드는건 갤럭시 노트!!

 

아래는 제가 키우고 있는 까칠입니다!

 

XIAOMI Mi-One 개봉기

헬마입니다.

약 보름전에 정신을 차리고 보니 이 물건을 질렀더랬죠. 갤럭시 노트를 사용하면서 유일한 단점이자 불만이 MIUI 를 사용하지 못 한다는 점이었습니다. 갤럭시S2 를 쓰면서도 MIUI를 사용했지만 포팅이 불안정한 관계로 가끔가다 재부팅이나 기타등등 속을 썩일때가 있었지요. ( 지금은 갤럭시S2 는 정식 지원을 받고 있습니다. ^^ )

갤럭시 노트는 아직 개인적인 포팅롬도 없어서 입맛만 다시던 차에 결국은 정신을 차리고 보니 이 물건이 제 손에 있습니다. 일단 이녀석의 주파수는 3G 의 국내 주파수를 모두 지원해서 국내에서 개통해서 사용하는데에는 전혀 문제가 없으리라 생각합니다.

 

첫 박스 사진입니다. 박스는 일종의 원가절감인지 환경보호의 일환인지 종이 박스입니다. 상자 내부에 형태를 잡아주는 속지(?!) 도 종이로 되어 있습니다. 그… 계란 판의 그 재질과 거의 같더군요.

상자를 열면 위와 같이 폰이 절 맞이해줍니다. 갤럭시 노트를 보다가 이녀석을 보니 어찌 폰이 이리 작아보이는지 참 알수가 없네요. 이녀석은 4인치 854×480 해상도입니다. 4.3인치 800×480 의 갤럭시S2 도 크다라고 생각했던게 며칠전인듯한데 이젠 모두 작아보이네요. 왠지 손이 늘어난 듯한 느낌입니다.

폰을 꺼내고 그 밑에 포함된 간단한 구성품 사진입니다. 콘센트에 꼽아서 사용할 수 있는 충전기( 하지만 국내와는 규격이 다를거 같아 꺼내보지 않았습니다) 와 마이크로USB 케이블, 배터리, 간단한 안내서입니다. 주황색으로 된 것이 배터리입니다. 특이하게도 배터리용량이 1830~1930 이라고 적혀있더군요. 복불복이라는건가???????

이제 폰 사진입니다. 정면 사진입니다. 왼쪽 상단에 MI 글자는 폰에 인쇄되어 있는 글자입니다. 나름 깔끔하니 맘에 드네요. 밑에는 터치식 3버튼이고 메뉴 버튼 홈버튼 백버튼 입니다.

뒷 사진입니다. 배터리 커버가 우레탄 재질인듯한 소재로 코팅이 되어있어 미끄러지지 않는 점이 마음에 듭니다. 갤럭시S2 나 갤럭시 노트에 나타나는 배터리커버보다 덜 미끄러집니다.

두께를 보기 위해 옆을 찍었습니다. 생각외로 두껍습니다. 무게도 묵직한 편이구요. 하지만, DesireHD 보다는 확실히 가벼웠습니다. DesireHD 는 무슨 돌덩이를 드는 듯 했지요. 옆에는 MI 버튼이라는 MIUI 롬 전용버튼이 달려있는데 기본적으로는 카메라에 할당되어있고 다른 기능으로 변경할 수 도 있습니다.

마지막으로 배터리 커버를 벗긴 화면입니다. 왼쪽으로는 MicroSD 카드를 오른쪽으로는 SIM 카드를 꼽을 수 있습니다. 아직은 넣을만한 심카드가 없네요. OPMD USIM 카드를 구해서 꼽아줘야겠습니다. ^^

 

간략하게 몇십분 만진 소감으로는 퀄컴 스냅드래곤 1.5 기가 듀얼코어 답게 상당히 빠릅니다. MIUI 를 기본 롬으로 채택한 기기답게 정말로 MIUI 를 쓰는 느낌을 받을 수 있네요. 그런데, …. 기본으로 깔린 어플이 굉장히 많습니다…. 중국어 쏼라쏼라 어플들… 싹 지워줘야겠어요. ^^ MIUI 를 정말로 좋아하신다면 사셔도 나쁘지 않을 것 같습니다.

Total Commander – H.M – Build 112

헬마입니다.

토탈 커맨더 리팩 빌드 112 입니다.

토탈 커맨더가 베타 14가 나왔습니다. 가만보니 일주일 주기로 계속 나오는거 같네요.

이번 빌드에서는 저번 빌드에서 몇몇 문제점이 생겼던 압축파일 엔터키로 들어가는 설정이 고정되지 않던 것들을 고쳤습니다.

빌드 112
* Total Commander 8.0 Beta 14
* SynWrite 2.8.304
* Imagine 1.0.9, 2011-12-10
+ Imagine 플러그인 Google WebP Format
* sLister’s SumatraPDF x86/x64 2.0 Pre-Release r4940
* 압축도구가 토탈 커맨더 기본디렉토리에 설치되는 문제 수정

TotalCMD – H.M – Build 112

Total Commander – H.M – Build 111

헬마입니다.

토탈커맨더 8.0 이 이제 RC가 나오겠거니 했는데 베타 13이 나왔네요.

베타 13을 포함한 리팩입니다.

빌드 111
* Total Commander 8.0 beta 13
* SynWrite 2.8.300

빌드 110
* Total Commander 8.0 beta 11
* DiskInternals Reader 1.6
* SynWrite 2.7.245
* Imagine 1.0.9 2011-12-04 x86/x64 ( 플러그인 업데이트 포함 )
* TCTorrent 2.0.1
* F4Menu 에 몇몇 프로그램이 정상적으로 등록되 않는 문제 수정
* Imagine 단축실행키 ‘Ctrl+I’ 에 정상적으로 할당되도록 함
+ 몇몇 압축파일을 다루기위한 압축도구 포함

빌드 109
* Total Commander 8.0 Beta 9
* SynWrite 2.7.124
* TCTorrent 2.0.0 ( x86/x64 )

TotalCommander – H.M -. Build. 111