티스토리 뷰

MFC

[MFC] Worker Thread (워커 쓰레드)

열혈허슬러 상추님 2019. 11. 12. 14:07
190717-3
 

워커 스레드 : MFC 를 사용한 네모계속그리는 쓰레드를 만들어보자
 
   static UINT WorkerThread(LPVOID param); //* static 함수만 가능
 
 
UINT CWTView::WorkerThread(LPVOID param)
{
    //*
    Data* pd = (Data*)param;
    CClientDC dc(pd->m_pWnd);
    CPoint pt = pd->m_pt;
    delete pd;
    for (int count = 0; count < 100000;++count) {
        for (int i = 0; i <= 100; i += 5) {
            dc.Rectangle(pt.x, pt.y, pt.x + i, pt.y + i);
            Sleep(50);
        }
    }
    return 0;
}
 
void CWTView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
 
    Data* pd = new Data(this, point);
    AfxBeginThread(WorkerThread, (LPVOID)pd);
 
    CView::OnLButtonDown(nFlags, point);
}
 
void CUserTView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    AfxBeginThread(RUNTIME_CLASS(CMyThread)); //UI생성 스레드생성 다 해준다.
    CView::OnLButtonDown(nFlags, point);
}
 
- 클래스로 쓰레드 생성하기
 
void CUIWindow::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    CClientDC dc(this);
    dc.Rectangle(point.x-20,point.y-20,point.x+20,point.y+20);
    CFrameWnd::OnLButtonDown(nFlags, point);
}
 
 
void CUIWindow::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    ++m_count;
    CString s;
    s.Format(_T("count : %d"), m_count);
    SetWindowText(s);
    CFrameWnd::OnTimer(nIDEvent);
}
 
 
int CUIWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
 
    // TODO: 여기에 특수화된 작성 코드를 추가합니다.
    SetTimer(10, 1000, NULL);
 
    return 0;
}
댓글
댓글쓰기 폼