땡큐~~ 땡큐~~땡큐~~!
kylix 님이 쓰신 글 :
: 쓰레드에서 메인쓰레드의 GUI를 건드리면 안됩니다.
: 쓰레드에서 메인쓰레드의 GUI작업을 하실때에는 Synchronize메소드를 이용해야 합니다.
:
: 땅주인 님이 쓰신 글 :
: : Tool : C++ Builder XE5
: :
: : 화면에 Bitmap 이미지 몇 장을 번갈아 가면서 보여주면서 간단한 애니메이션을 구현했는데요..
: : 애니메이션으로 보여주어야 할 이미지가 전부 4개라 4개의 이미지를 애니메이션으로 표시하면서
: : 돌리니, 저사양 PC에서는 버벅 거리다가 프로그램이 Hangup되어 버리네요.
: : (4개의 이미지를 애니메이션으로 보여주어야 할 상황)
: :
: : 애니메이션용 스레드를 정지시키고 돌리면 죽지않고 쭉 가는 것으로 보아서는 그런 것 같습니다.
: :
: : 알기로는 화면의 Repaint를 잠시 멈춰두고 이미지 작업을 하고 이미지 작업이 다 끝나면
: : 한 번에 화면을 Repaint하는 것이 있는 것으로 알고 있는데 어떻게 하는 지 ...??
: :
: : 가령 아래와 같은 형태의 코드
: :
: : // 화면 Repaint 잠금
: : RepaintStop();
: :
: : // 이미지 작업..
: : // 이미지 작업..
: : ...
: : ..
: : // 화면 Repaint
: : Repaint();
: :
: : 이식의 구성을 ..
: :
: : 재가 사용중인 코드는 아래와 같습니다.
: :
: : void __fastcall TAniThread::Execute()
: : {
: : TWaitResult Result;
: : while ( FormMain->m_bAniThread ) {
: : Result = GAniEvent->WaitFor(500); // Wait 0.5 second
: : if ( bIconFirst ) { // First Icon
: : TBitmap *pBitmap = new TBitmap();
: : FormMain->ImageList->GetBitmap(m_iIndex,pBitmap);
: : FormMain->Image->Picture->Bitmap = pBitmap;
: : delete pBitmap;
: : m_iIndex++;
: : if ( m_iIndex > 8 ) m_iIndex = 0;
: : }
: : if ( bIconSecond ) { // Second Icon
: : TBitmap *pBitmap = new TBitmap();
: : FormMain->ImageListCM->GetBitmap(m_iIndex2,pBitmap);
: : FormMain->ImageHydro1->Picture->Bitmap = pBitmap;
: : delete pBitmap;
: : m_iIndex2++;
: : if ( m_iIndex2 > 10 ) m_iIndex2 = 0;
: : }
: : if ( bIconThird ) { // Third Icon
: : // ...
: : }
: : if ( bIconForth ) { // Forth Icon
: : // ...
: : }
: : //Sleep(500); // Sleep을 써보기도 했는데 마찬가지
: : }
: : }
: :
: :
|