외규장각 도서 환수 모금 캠페인

Thread 해결 ^____________________^

Posted 2007. 6. 1. 13:08, Filed under: Study/Computer Science

어제부터 고민하던 문제 완죤 해결 ㅋㅋㅋ

OK 버튼 눌렀을 때 실행하는 모든 프로시저를 스레드로 만들면 순차실행하는 데 아무런 문제 없음
전에 이런 방식으로 할려다가 Dialog Item 들을 마음대로 사용할 수 없어서 포기했는데 (5번 문제점)

CWnd를 상속한 클래스에서 멤버 함수로 핸들을 가지고 있으니까 이걸 써두 되고..
The m_hWnd data member is a public variable of type HWND

윈도우를 통째로 스레드 프로시저의 파라미터로 넘겨서 캐스팅하면 OnOK 함수 내에서 처럼 사용 가능하다는 것 ^^ .. 다른 맴버 변수에 직접 접근할 수 있기 때문에 이 방법이 더 깔끔하다.

스레드 첨 써봐서 진짜 힘들었는데.. 그럭저럭 인제 어째 되는지는 알겠다.
이번 경우는 스레드간 통신도 없고 동기화도 안해도 되는 별로 어렵지 않은.. 단지 스레드였지만
다음에는 더 어려운거에 도전해봐야지 ㅋㄷ

UINT threadCnt(LPVOID DlgHpcnt)
{
 // create class instances
 CHpCntDlg* Cntdlg = (CHpCntDlg*)DlgHpcnt;   // 이렇게 캐스팅해서 맘껏 사용 ㅋㄷ
 HpCounter* hpc = new HpCounter(Cntdlg);
 
 // disable button
 Cntdlg->GetDlgItem(IDOK)->EnableWindow(false);

 // Homepage upload count
 hpc->MakeTmp();   // make temporary folder
 Cntdlg->GetDlgItem(IDC_STEP)->SetWindowText("홈페이지 업로드 카운트 중...");

 if(Cntdlg->m_CheckINI ==TRUE) {
  hpc->WriteINICnt();
 }

 // Sample Count
 Cntdlg->GetDlgItem(IDC_STEP)->SetWindowText("엔진 샘플 수 카운트 중...");
 SpCounter* spc = new SpCounter(Cntdlg);
 for(int i = 0; i < 7; i++)
 {
  spc->TotalSample();
  spc->ECSample();
  spc->MoveDate();
 }
 
 CTimeSpan day = CTimeSpan(1,0,0,0);
 CTime Date = CTime::GetCurrentTime() - day;

 CString szBuffer = _T("");
 char szBuf[80] = _T("");


 
 // Print Result
 Cntdlg->m_Result.DeleteAllItems();
 Cntdlg->GetDlgItem(IDC_STEP)->SetWindowText("결과 출력");
 for (i = 0; i < 7; i++){
  szBuffer.Format("%8d.%02d.%2d", Date.GetYear(), Date.GetMonth(), Date.GetDay());
  Cntdlg->m_Result.InsertItem(LVIF_TEXT, 0, szBuffer, 0, 0, 0, 0);
 
   itoa((spc->arResult[6-i]).nTotalSample, szBuf, 10);
   Cntdlg->m_Result.SetItemText(0, 1, szBuf);

   
   itoa((spc->arResult[6-i]).nECSample, szBuf, 10);
   Cntdlg->m_Result.SetItemText(0, 2, szBuf);

   
   
   itoa((hpc->arResult[6-i]).nKorCnt, szBuf, 10);
   Cntdlg->m_Result.SetItemText(0, 3, szBuf);
   
   itoa((hpc->arResult[6-i]).nEngCnt, szBuf, 10);
   Cntdlg->m_Result.SetItemText(0, 4, szBuf);
   
  Date -= day;

 }
 //enable Run button
 Cntdlg->GetDlgItem(IDOK)->EnableWindow(true);
 
 return 0;
}

Response : ,


Recent Posts

Recent Comments

Recent Trackbacks

Total hit (Today , Yesterday )

Admin Write Post