글 수 429
http://lab.aralgood.com/board_documents/3202
에 나온대로 플러그인이 초기화되는 시점이 '안전하지' 않기 때문에
Init 단에 스레드를 추가하기가 어려운데, 이를 위한 회피 방법입니다
[OnInitThread에 AfxBeginThread를 사용하면 '무조건' 얼어버리는 현상이 있었습니다
예전에 (폐기한) DumpText2를 시험할 때나 현재 CustomDic을 개선할 때 모두 나타났습니다]
원리는 간단한데,
1. SetTimer로 수 초 뒤 특정 함수가 동작하도록 한다.
2. 그 함수에서 AfxBeginThread나 _beginthreadex를 시도한다.
UINT threadProc(LPVOID data){
CDumpDlg dlg;
dlg.DoModal();
return 0L;
}
VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime){
m_pThread = AfxBeginThread(threadProc,NULL);
KillTimer(NULL,idEvent);
}
BOOL CDumpTextApp::OnPluginInit(HWND hSettingWnd, LPSTR szOptionStringBuffer){
m_hSettingWnd = hSettingWnd;
m_szOptionStringBuffer = szOptionStringBuffer;
m_pTmpTimer = SetTimer(NULL,1,5000,TimerProc);
return TRUE;
}
이 경우엔 초기화는 안정적으로 동작하지만 역시 '종료'시
추가 스레드가 작동중인지 아닌지 주의해주어야 할 것 같습니다.
에 나온대로 플러그인이 초기화되는 시점이 '안전하지' 않기 때문에
Init 단에 스레드를 추가하기가 어려운데, 이를 위한 회피 방법입니다
[OnInitThread에 AfxBeginThread를 사용하면 '무조건' 얼어버리는 현상이 있었습니다
예전에 (폐기한) DumpText2를 시험할 때나 현재 CustomDic을 개선할 때 모두 나타났습니다]
원리는 간단한데,
1. SetTimer로 수 초 뒤 특정 함수가 동작하도록 한다.
2. 그 함수에서 AfxBeginThread나 _beginthreadex를 시도한다.
UINT threadProc(LPVOID data){
CDumpDlg dlg;
dlg.DoModal();
return 0L;
}
VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime){
m_pThread = AfxBeginThread(threadProc,NULL);
KillTimer(NULL,idEvent);
}
BOOL CDumpTextApp::OnPluginInit(HWND hSettingWnd, LPSTR szOptionStringBuffer){
m_hSettingWnd = hSettingWnd;
m_szOptionStringBuffer = szOptionStringBuffer;
m_pTmpTimer = SetTimer(NULL,1,5000,TimerProc);
return TRUE;
}
이 경우엔 초기화는 안정적으로 동작하지만 역시 '종료'시
추가 스레드가 작동중인지 아닌지 주의해주어야 할 것 같습니다.