C/C++/MFC
VC7.1 MFC Thread 사용시 UpdateData 사용하기
2008.12.31 17:35
Thread 내에서 UpdateData 를 호출하거나
UpdateData()함수가 있는 함수를 호출하면
Debug Assertion Falied 라는 에러가 발생한다.
이는 DEBUG 모드일때만 발생하는 것이기 때문에
RELEASE 모드로 컴파일 할때는 나타나지 않는다.
해결방법
MESSAGE 를 사용하면 해결할수 있다.
1. 사용자 메세지 작성
#define UM_UPDATEDATA (WM_USER+1)
2. UpdateData 처리할 함수 작성 (LRESULT 형을 반환해야 한다.)
LRESULT OnUpdateDataFalse(WPARAM wParam, LPARAM lParam);
LRESULT CDTES1_BASEDlg::OnUpdateDataFalse(WPARAM wParam, LPARAM lParam)
{
UpdateData(FALSE);
return 0;
}
3. MESSAGE_MAP 연결
BEGIN_MESSAGE_MAP(CDTES1_BASEDlg, CDTESDialog)
ON_MESSAGE(UM_UPDATEDATA,OnUpdateDataFalse)
END_MESSAGE_MAP()
4. UpdateData를 수행할 쓰레드 에서 메세지 보내기 추가
pParent->PostMessage(UM_UPDATEDATA);
pParent 는 UpdateData가 있는 클래스의 포인터이다.(즉 메인 윈도우)
끝.
UpdateData()함수가 있는 함수를 호출하면
Debug Assertion Falied 라는 에러가 발생한다.
이는 DEBUG 모드일때만 발생하는 것이기 때문에
RELEASE 모드로 컴파일 할때는 나타나지 않는다.
해결방법
MESSAGE 를 사용하면 해결할수 있다.
1. 사용자 메세지 작성
#define UM_UPDATEDATA (WM_USER+1)
2. UpdateData 처리할 함수 작성 (LRESULT 형을 반환해야 한다.)
LRESULT OnUpdateDataFalse(WPARAM wParam, LPARAM lParam);
LRESULT CDTES1_BASEDlg::OnUpdateDataFalse(WPARAM wParam, LPARAM lParam)
{
UpdateData(FALSE);
return 0;
}
3. MESSAGE_MAP 연결
BEGIN_MESSAGE_MAP(CDTES1_BASEDlg, CDTESDialog)
ON_MESSAGE(UM_UPDATEDATA,OnUpdateDataFalse)
END_MESSAGE_MAP()
4. UpdateData를 수행할 쓰레드 에서 메세지 보내기 추가
pParent->PostMessage(UM_UPDATEDATA);
pParent 는 UpdateData가 있는 클래스의 포인터이다.(즉 메인 윈도우)
끝.
관련 문서가 검색되었습니다.
- [2012/11/13] ZEO 모듈이란? (6394)
- [2010/12/29] 03_VC6.0 테트리스 만들기 - 벽돌(Shape)만들기 (27847) *2
- [2010/10/08] 클래스 내에서의 쓰레드 (15588)
- [2010/08/25] 클래스를 배열로 묶어 사용하기 ()
- [2010/01/30] BUTTON 버튼색 변경하기 ()
- [2010/01/23] 기본적인 Button 사용하기 ()
- [2009/06/14] OnKeyDown 에서 Ctrl, Shift, Alt 눌러졌는지 확인하는 방법 ()
- [2009/02/03] WM_DEVICECHANGE in MFC ()
- [2008/12/25] MFC 메모리 누수 감지 ()
- [2008/07/15] vc 소스 CWATTabCtrl01 - Tab Control 간단히 사용하기 ()