오랜만에 삽질...

 

for(i = 0; i < 100000; i++)
 {
  fpAcc = fopen("test.dat", "r");

  if(!fpAcc)
  {
   printf("i = %d\n", i);

   getchar();
   exit(1);
  }
 }

 

Windows XP Pro SP2, Windows 2003 Server Standard SP1

 

두 OS 동일하게 509에서 끝난다.

 

근데 512면 512지 509는 뭐냐...

 

멍청한 컴터가 509라는 숫자는 모를테고...

 

512 아니면 1024일텐데...

 

이유는 도저히 모르겠다...

 

MSDN을 뒤지면 이유가 나올려나...

 

하루종일 fclose() 한줄 코딩 안한걸 못찾아서 별에별 삽질을 다 했다...

 

어이없이 날려먹은 하루를 어디서 보상받을까...

'Development > 삽질의 추억' 카테고리의 다른 글

LNK2019, LNK1120 Error  (0) 2011.08.13
LNK2019 에러  (0) 2011.08.13
fatal error C1010  (0) 2011.08.13
DISTINCT 사용하기...  (0) 2011.08.13
CreateFile/CloseHandle을 반복적으로 사용할때...  (0) 2011.08.13
안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

비주얼 C++ 컴파일러는 미리 컴파일된 헤더(Precompiled Header)를 지원하고, 프로젝트 설정을 통해 대상 헤더를 지정할 수 있다. 특히 MFC는 수정하지 않고 사용하는 헤더 수가 많기 때문에, 이 방식을 사용하면 매번 전체를 컴파일하지 않아 개발 속도가 빨라진다.

 

그런데 새로운 소스 파일을 추가하다 보면 다음과 같은 오류 메시지를 볼 수 있다. 이 오류 메시지는 미리 컴파일된 헤더와 관련이 있으므로, 프로젝트 설정에서 미리 컴파일된 헤더를 사용하지 않겠다고 설정하면 없앨 수 있다. 하지만 앞에 언급한 효율을 포기하는 것이므로 바람직하지는 않다.

 

fatal error C1010: unexpected end of file while looking for precompiled header directive

 

미리 컴파일 된 헤더를 사용하려면, 모든 CPP 확장자와 소스 파일은 미리 컴파일 된 헤더를 반드시 포함해야 한다. 위에 나타난 오류는 이것을 빠뜨려서 발생한 것일 뿐이다. 이때는 다음 구문을 오류가 발생한 소스 파일의 가장 위쪽에 넣어주면 된다.

 

#include "stdafx.h"

 

미리 컴파일된 해더는 PCH 확장자로 컴파일되며, 대상 헤더가 변경되면 다시 컴파일 된다. 하지만 때때로 변경된 내용이 반영되지 않아 문제를 일으키는 경우가 있다. 이때는 [Bulid]->[Rebulid All] 메뉴를 사용하여 모두 지우고 새로 컴파일할 수 있다. 문제가 없는 것 같은데 자꾸 정상적으로 동작하지 않으면 이 방법을 꼭 시도해보자.

 

출처 : 윈도우프로그래밍(Visual C++ MFC Programming), 한빛미디어, 김선우, 신화선 저

 

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

테이블 중복값 제거하는 쿼리만드느라 30분간 삽질했다...

 

DISTINCT 사용 시 각 필드별 유니크한 값이 나올 경우 어떻게 처리해야하는지 아래를 참고...

 

============================================================================================

 

  col1 col2 col3
row1 a 1 0
row2 a 1 9
row3 b 2 0
row4 b 2 9
row5 c 3 0

 

위와 같은 테이블이 존재할 경우

 

1) 

select distinct col1 from table 

 

결과

a

b

c

 

2)

select distinct col1, col2 from table

 

결과

a    1

b    2

c    3

 

3)

select distinct col1, col2, col3  from table

 

결과

a         1        0

a         1        9

b         2        0

b         2        9

c         3        0

 

 

3)번 쿼리 결과의 이유는 DISTINCT 는 하나의 ROW 값의 유니크한 데이터를 가져오기 때문에 각 컬럼의 데이터들을 더했을 경우 각각의 ROW값이 유니크한 데이터가 되기 때문에 그렇다.

 

그러므로 기준이 되는 필드의 중복을 제거한 한개의 데이터를 확인하고 싶을 경우 기준이 되는 데이터를 정하고 나머지 필드가 그 기준이 되는 데이터에 따라 각각 다른 데이터를 가질경우 나머지 값이 어떠한 기준으로 뿌려질지 결정해 주어야 한다.

 

4) 

SELECT
DISTINCT COL1, MAX(COL2), MAX(COL3)

FROM TABLE
GROUP BY COL1

 

결과

a         1        9

b         2        9

c         3        0

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

파일전송 프로그램만들때...

서버 IOCP사용...

작은 용량의 파일전송시에는 아무런 문제가 없었다...

그러나 5MB가 넘어가는 파일 전송시 어느 순간 CreateFile하면 ERROR_ACCESS_DENIED Return Code가 넘어온다...

한번에 들어온 패킷을 처리하기전에 패킷이 두번연속 들어와서 생기는 문제였다...

 

 

첫번째 시도...

받은 패킷을 큐에 차곡차곡 쌓아두고 패킷처리루틴에서 하나씩 빼서 쓴다...

그래도 여전히 같은 문제가 발생했다...

보내는 쪽에서 파일 패킷을 보낼때마다 Sleep( 100 )을 하면 아무런 문제없이 잘 되었다...

문제는 받는 쪽에서  처리하기도 전에 보낸다는게 문제였다...

그런데 Sleep( 100 )을 걸어버리면...

파일을 전송하는데 시간이 너무 많이 걸린다는것이다...

이 문제로 솔직히 4일간 삽질했다...

 

처음엔 문제를 파악하는데 하루...

연속패킷때문이라는것을 알고 패킷을 큐에 넣고 빼는 루틴적용하는데 하루...

(스파게티소스로인해...ㅡ.ㅡ;;)

 

여전히 같은 문제라는걸 파악한후 해결방법을 생각하고 적용하는데 하루...

보내는쪽에서 패킷보내고 Recv() 대기상태...

받는쪽에서 패킷받는것 성공하면 Send()...

이 구조로 바꿨으나 역시 해결안됨...

 

여기서 미쳐버리는줄 알았으나...

받는쪽에서 패킷받는것 성공하면 Send() 하던것을...

패킷받고 처리가 끝나면 Send()로 대략 코딩 네줄 아래로 옮겼더니...

 

드디어 성공...

 

해결하고 너무너무 허탈하고 이게 무슨 삽질인가 정말 나한테 욕이 나온다...

 

 

역시 사람은 머리가 안돌아갈때는 하루고 이틀이고 그냥 푹 쉬어줘야 한다는 결론이 나왔다...

 

왜냐고???

 

Recv() Send() 구조로 바꾸고난 그날 당직을 섰다...

밤새 삽질하다가 다음날 하루종일 집에서 잠만잤다...

당직으로 인한 피로누적... (아침 10시출근 -> 다음날 11시 퇴근)

실제 깨어있던시간 아침 8시 -> 다음날 오후 5시 30분...

이래서 오후 5시 30분부터 다음날 아침 8시까지 푹잤다...

그리고 오늘 아침 출근해서 바로 문제 해결...ㅡ.ㅡ;;

 

뭔가 더 효율적인 구조를 만들 수 있겠지만...

여기에 투자한 시간이 너무 많이 걸려서 우선은 이상태로 만족할란다...

프로그램 다 만들고나면 그때 다시 효율적인 구조로 바꾸도록 생각해 볼란다...

 

코딩중 꼬여서 안풀리는 당신...

 

 

그냥 자라...!!!

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,