ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쓰레드 관련
    쥬신게임아카데미/C++ 2016. 3. 29. 02:48

    쓰레드 생성시 전달되는 함수는

    DWORD WINAPI ThreadProc(LPVOID lpParam)

    이런식으로 반환값은 DWORD, 매개변수는 LPVOID 인자값..WINAPI 호출규약형식으로 지정되어야 한다..

    그리고 그 함수내 지역변수는 각 쓰레드에서 공유되지 않음..스택영역이니까..

     

    쓰레드 종료는 항상

    1. return 0이 최고다. (이건 하나씩 리턴되면서 종료...순차적으로 다해야함 아래랑 비교됨)

    2. ExitThread함수 호출방식(특정 위치에서 쓰레드의 실행을 종료시키고자 하는 경우 즉, 여기서 모든쓰레드를 종결합니다라는 의미

    그러나 ...순차적으로 호출된 함수내에 객체가 있다면..소멸자가 호출이 안되는 경우가있어서 메모리 누수 발생된다..그래서 return 0 호출이 더 좋은..)

    (매개변수로 종료코드는 지정하는데 종료코드는 GetExitCodeThread의 두번째 인자로부터 얻을 수 있다.)

     

    쓰레드가 종료되길 기다려야 할까?

    기다려야 한다. 만약에 main쓰레드의 종료는 프로세스의 종료를 의미하고 각자 역할의 프로세스안에 있는 쓰레드들이 자신의 일을 마치기도 전에 소멸된다.

     

    GetExitCodeThread(hThread[0], &result);

    여기서 2번째 인자는 종료코드라고 하는데..//우선 디버그 확인바로는 쓰레드에서 사용할 해당함수가 반환되는 반환값이 들어간다..이거 뭐지?

    //단순히 종료코드인데 연산결과 반환용으로 사용한듯..

     

    //궁금한것..

    커널 오브젝트?? Signaled 상태?

     

    쓰레드 변경이 라인단위로 이뤄진다고 생각하지만 아니다. 함수 중간에 또는 심지어 ++연산중에도 변경이 이뤄진다.

    값을 중복으로 쓰는 전역변수 같은건  동시에 메모리 영역을 참조하는 문제를 일으킬 수 있다.

     

    핸들값은 핸들 테이블에 정보가 등록된 이후에 이 핸들 테이블의 소유자에 해당하는 프로세스에게만 의미를 지닌다.

     

    자식 프로세스의 커널 오브젝트 소멸과 관련된 문제?? 뭐지??

Designed by Tistory.