C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[67618] Re:Re:쓰레드 생성후 소멸은
memi [j00nh0] 1534 읽음    2012-06-21 10:50
우선 답변 감사드립니다~!
폼클로즈 이벤트에서 Data_Close_Flag = false 준후
실행하는 함수 반복문 제일 작은 단위에 아래 같이 코딩했드니
    for(int i = 0; i < len/16; i++) {
        if(!Data_Close_Flag) return;
이미 해결하긴 했는데 너무 꼼수 아닌가해서 찜찜하던 차에 답변보러 왔드니 이런식으로 코딩하라는 말씀에 안도하고 갑니다~




장성호 님이 쓰신 글 :
: Thread의 Execute 함수 코드를 봐야 원인을 알수 있을듯 한데요
:
: TDataThd 쓰레드의 Execute가 언제 끝나나요?
:
: 대게 Thread에서 Execute함수에서
: Process의 종료와  thread 자신의 종료 flag를 체크하도록 코딩합니다.
:
:
: void __fastcall MyThread::Execute()
: {
: 	//---- Place thread code here ----
:         //프로그램의 종료와 thread의 종료 플래그를  종종 체크해야 한다.
: 	while(!Application->Terminated && !this->Terminated)
: 	{
: 		Sleep(10); //thread가 cpu자원을  다쓰지 않도록 .. sleep을 준다.
: 
: 		// 반복한 작업..
: 
:                 작업1               
:                 작업2
: 
: 		//GUI를 건드릴 일이 있으면
: 		Synchronize(메소드);
: 	}
: }
: //---------------------------------------------------------------------------
: 
: 

:
: 님께서 만든 TDataThd 의 Execute에서 Read_Data 라는 메소드를 호출한다면?
:
:  Read_Data 메소드에서 위와같은 종료를 플레크를 체크해야 할것이구요
:
: Form은 free되었는데.. Read_Data 에서 Form에 있는 어떤 변수나 객체에 접근한다면
: access-violation이 날수 밖에 없을것 입니다.
:
:
: 그럼..
:
:
:
: memi 님이 쓰신 글 :
: : http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=677
: : 팁&트릭에서 김태선님이 작성하신 쓰레드에 함수실어서 잘 사용하고 있습니다~
: :
: : 그런데 쓰레드가 돌고 있을때 폼클로즈를 해버리면 간혹 이런 핸들 에러나 아래 메시지가 뜨는데..
: : ---------------------------
: : Debugger Exception Notification
: : ---------------------------
: : Project DTG.exe raised exception class $C0000005 with message 'access violation at 0x0040573f: read of address 0x000002c8'.
: : ---------------------------
: : Break   Continue   Help  
: : ---------------------------
: :
: : 쓰레드 생성시 FreeOnTerminate = true; 를 넣어주면 익스큐트가 끝나면 자동으로 해제로 알고있는데...
: :
: : 창이 닫히면서 쓰레드가 종료되며 메모리 해제가 일어나는지.. 아니면 폼클로즈 이벤트에서 직접 메모리 해제를 해줘야할지..
: : 아래처럼 별 시도를 다해봤는데 잘 안되네요 ㅡㅡ;
: :
: : TDataThd * DataThd;
: : void __fastcall TFrm_Main::LV_HeaderDblClick(TObject *Sender)
: : {
: :     DataThd = new TDataThd(&Read_Data, Sender);   //생성 ~ 함수시작
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TFrm_Main::FormClose(TObject *Sender, TCloseAction &Action)
: : {
: : //    if(!DataThd != NULL)
: : //    if(!DataThd->Suspended)
: : //    if(!DataThd->Finished)
: : //        DataThd->Suspend();
: : // delete DataThd;
: : }

+ -

관련 글 리스트
67615 쓰레드 생성후 소멸은 memi 1874 2012/06/21
67617     Re:쓰레드 생성후 소멸은 장성호 1618 2012/06/21
67618         Re:Re:쓰레드 생성후 소멸은 memi 1534 2012/06/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.