티스토리 뷰

워커 쓰레드에서 메인윈도우 사용법, AfxGetMainWnd 주의점

- 쓰레드 호출 시 CMainFrame 포인터를 쓰레드에 전달해서 쓰레드에서 메인윈도우 다룰때 이 포인터를 이용한다.

- 4행 처럼 쓰레드내에서 AfxGetMainWnd()  함수 호출하면 메인윈도우를 얻지 못해 예외 발생하는 경우가 있다. AfxGetMainWnd() 는 메인 쓰레드 내에서만 사용해야 한다.

- 13행 처럼 포인터 전달이 어려우면, 4행처럼 App 클래스를 이용해서 메인윈도우에 접근한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UINT 쓰레드네트워크감시(LPVOID arg)
{
    // 로그인 성공하면 네트워크 감시시작
    // CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
    // CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->GetMainWnd();
    CMainFrame* pMainFrame = (CMainFrame*)arg;
...
    return 0L;
}
 
void CMainFrame::CallThread()
{
    if (NULL == AfxBeginThread(쓰레드네트워크감시, (LPVOID)this))
        return FALSE;
...
}
cs

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30