티스토리 뷰
워커 쓰레드에서 메인윈도우 사용법, 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 |