Form만 존재하는 프로그램도 내부적으로 기본적인 쓰레드가 생성되어 동작됩니다.
마우스등이 움직이면 당근 화면을 다시 그려야되는데
빌더초보님께서 새로 생성한 쓰레드에서도 화면을 마구 그리고 있으니
둘이 충돌하게 됩니다.
새로 생성한 쓰레드에서는 그려야할 데이터만 생성해 두고
Main Form으로 이밴트를 날려서 Main UI에서 그리는 부분을 담당하도록 해야합니다.
상당히 빠르게 그려야 한다면 다른 방법을 생각해 보심이.. DirectShow 등...
빌더초보 님이 쓰신 글 :
: 쓰레드로 이미지 반복그리고있는중인데요
: 팁에있는 설명으로 쓰레드돌리는데요 자꾸 꺼지네요
: 스레드 실행시키면 첨엔 계속 그리다가 마우스를 움직이거나 키보드누르면
: 그냥 꺼저버립니다
:
: void __fastcall TForm1::BmpStart(TObject *Sender)
: {
: HWND h;
: TResourceStream *ResStream1;
: HINSTANCE ImageDllInstance;
: Graphics::TBitmap *wa1;
: wa1 =new Graphics::TBitmap;
: ImageDllInstance = LoadLibrary("angle.exe"); //DLL에서 이미지들을 가지고 온다.
: ResStream1 = new TResourceStream( (int)ImageDllInstance, "ID_800X600", RT_RCDATA );
: h = FindWindow(NULL,"팡야 united");
: wa1->LoadFromStream( dynamic_cast( ResStream1 ) );
:
: HDC dc = GetDC(h);
: do{
: TransparentBlt(dc, 0,0, 800,600, wa1->Canvas->Handle,
: 0,0,800,600,RGB(255,255,255));
: Application->ProcessMessages();
: Sleep(3);
: if(Form1->Caption != "사용중")
: break;
: }while(1);
: delete ResStream1,wa1;
: ReleaseDC(h,dc);
: FreeLibrary(ImageDllInstance);
: }
: 이것처럼 반복하게 되어있구요
:
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
: Button2->Enabled = false;
: multi* bmp = new multi(&BmpStart, Sender);
: bmp;
: }
: 이렇게 실행 시켰거든요
:
: 근데 키보드 입력이나 마우스 입력이 들어오면 바로 동작이 멈춰버려요
: 쓰레드는 계속도는거같은데;
: 싱크로나이즈 함수를 써야하는 건가요?
:
: 어떻게해야 동작이 안멈추고 끌때까지 돌아갈가요;
: 김태선님의 "지정 함수를 쓰레드에 실어서 실행시키는 클래스"
: 글을보고 따라했거든요..