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
[38116] Re:쓰레드 중에 에러가..
신동승,無敵 [moojuck] 1148 읽음    2004-11-21 01:35
VCL 쓰레드가 하는 일 중 하나는 화면에 시각적으로 표시되는 컴포넌트를 처리하는 것입니다.

물론 쓰레드이기 때문에 다른 Thread와 동기화 문제가 발생할 가능성이 있습니다.

고로.. 님이 만드신 Thread에서 User Interface와 관련된 처리를 하게 될 때면

VCL 쓰레드와 충돌이 발생할 가능성이 높습니다.

이런 경우 Thread에서 User Interface와 관련된 처리를 하는 함수를

procedure UIFunc; 라는 함수로 만들어 놓고

Thread 안에서 필요할 때 Synchronize(UIFunc); 라는 형식으로 호출합니다.

Thread Class를 하나 만들어 보면 다음과 같은 주석으로 설명해 줍니다.

//---------------------------------------------------------------------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TTest::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------

고로 님이 겪고 계신 문제는 Thread 내에서 Canvas 가지고 작업하는 루틴을

별도의 함수로 Refactoring 해서 Synchronize(func)로 호출하시면 되겠습니다.


이재율 님이 쓰신 글 :
: 쓰레드를 사용중에 이런 에러가... 나오는데요..
:
: ---------------------------
: Debugger Exception Notification
: ---------------------------
: Project DownLoader.exe raised exception class EInvalidOperation with message 'Canvas does not allow drawing'. Process stopped. Use Step or Run to continue.
: ---------------------------
: OK   Help  
: ---------------------------
:
:
: 이게.... 어쩔땐 나오고.... 어쩔땐 또 안나오고......
:
: 지맘대로 입니다... ㅜㅜ
:
: 어찌혀야 되나요?~
:
: 대체 저게 무슨 말인가요?

+ -

관련 글 리스트
38115 쓰레드 중에 에러가.. 이재율 929 2004/11/21
38116     Re:쓰레드 중에 에러가.. 신동승,無敵 1148 2004/11/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.