Study - Programming/C/C++2009. 4. 6. 19:28
  어제 _beginthreadex()함수를 호출하다가 이런일이 있었다. 예를 들면 대충 이러한 상황이였다.

class ex_Class  //예제 클래스
{
private:
  unsigned WINAPI ThreadProc(LPVOID lParam)  //스레드를 위한 함수
  {
    //코오드
  }
  void TestFunction();

}
  void ex_Class::TestFunction()
  {
    _beginthreadex(NULL,0,ThreadProc,...);//스레드 생성
  }


이러니 _beginthreadex부분에서 컴파일 에러가 났다.  이유는 ThreadProc가 올바르지 않는 호출이라고..
처음에는 왜 그런지 몰라서 한참 헤매다가 나중에 겨우 이유를 찾았다.(당시에 인터넷도 안되고 해서 로컬 MSDN으로 한참 고생했다.)


우선 ThreadProc는 &ex_Class:ThreadProc같은 형태로 인자를 넘겨야 한다. ex_Class의 멤버함수이므로 접근 한정자를 붙여 주고 포인터이므로 &를 붙여 준다.
다음으로ThreadProc는 static으로 설정해야 한다. 함수 포인터의 호출이기 때문에 어느 한 객체에 소속되지 않게 하기 위해서 static으로 선언해야 한다. 이때문에 함수 내에서 멤버의 접근을 하기 위해서는 다음과 같은 방식으로 접근하여야 한다.

static unsigned WINAPI ThreadProc(LPVOID lParam)
{
  ex_Class *cls = (ex_Class*)lParam;
  cls->(멤버) 접근;
}

이는 꼭 스레드호출만이 아니라 함수포인터와 관련된 부분에서 해야 하는 것이다. 이런 상황에서 이런 오류를 만나서 예시가 이렇게 되었을뿐, 다른 상황에서도 마찬가지이다.
으흠... 아직 배우고 공부해야 할게 많다.
Posted by 머리
나의 이야기/Pictures2009. 4. 5. 15:19


아 희곤아.. 슬프구나!
Posted by 머리
나의 이야기/Funny2009. 4. 5. 13:31
<수학개그1>
미친 수학자가 버스에 타자마자 사람들을 향해 소리지르기 시작했다.
"모두 적분해버리겠어! 다 미분해버릴거야!"
그러자 모든 사람들이 겁을 먹고 버스에서 내려 도망갔다. 그런데 그 와중에 여자 한 명이 남아 있었다. 수학자는 그 여자에게 다가와서 물어보았다.
"당신은 겁나지 않아? 내가 당신을 적분하거나 미분해버릴텐데도?"
그러자 그 여자는 침착하게 대답했다.
"아뇨. 겁나지 않아요. 난 e^x 에요."


<수학개그2>
상수 함수와 e^x 가 뉴욕의 브로드웨이를 걷고 있었다. 그리고 저 쪽에서 미분연산자가 걸어오는 것을 본 상수 함수는 도망가기 시작했다. e^x 는 상수 함수를 쫓아가서 왜 도망가는지 물어보았다.
"미분 연산자가 오고 있잖나. 만약 그가 나를 본다면 나를 미분해 버릴테고 그러면 난 없어지지 않겠나."
그러자 e^x 가 말하길
"아, 그렇다면 나는 괜찮겠군. 나는 e^x 니까 말이지."
그리고 e^x 는 원래 방향대로 다시 걸어가기 시작했다. 예상대로 곧 미분 연산자를 마주치게 되었다.
e^x: "안녕, 나는 e^x 야"
미분 연산자: "안녕. 나는 d/dy 란다."
Posted by 머리