접기
////////////////////////////////////////////////////////////////////////// // 2008.10.27 - Thread - Thread 를 선언합니다. DWORD WINAPI Thread1 (LPVOID pVoid); DWORD WINAPI Thread2 (LPVOID pVoid); DWORD WINAPI Thread3 (LPVOID pVoid); DWORD WINAPI Thread4 (LPVOID pVoid); // Thread 를 Create 하게 됩니다.void ThreadPlay ( CString &str1, CString &str2, CString &str3, CString &str4 );
// 안에 중간 내부 소스입니다. case 4부터 시작함을 유의해주시기바라며 - ....실수 않기를 바랍니다. // 아래 붉은색으로 주석을 단 부분을을 Thread 로 구현을 하려고합니다.( 읽으면서 따라와주시기바람) // FlashCount++; switch( FlashCount ) { case 4: // flash 4개 { ////////////////////////////////////////////////////////////////////////// // (0,0) 에서, (w*m/4, h) rc1.left = 0; rc1.top = 0; rc1.right = w*m/FlashCount; rc1.bottom = h; m_ctrlFlash.MoveWindow(&rc1); // m_ctrlFlash.SetMovie(str1); ////////////////////////////////////////////////////////////////////////// // (w*m/4+1, h) 에서 (w*m/4, h) rc2.left = rc1.right; rc2.top = 0; rc2.right = 2*w*m/FlashCount; rc2.bottom = h; m_ctrlFlash2.MoveWindow(&rc2); //m_ctrlFlash2.SetMovie(str2); ////////////////////////////////////////////////////////////////////////// // (2(w*m)/4+1, h) 에서 (w*m/4, h) rc3.left = rc2.right; rc3.top = 0; rc3.right = 3*w*m/FlashCount; rc3.bottom = h; m_ctrlFlash3.MoveWindow(&rc3); //m_ctrlFlash3.SetMovie(str3); ////////////////////////////////////////////////////////////////////////// // (3(w*m)/4+1, h) 에서 (w*m/4, h) rc4.left = rc3.right; rc4.top = 0; rc4.right = w*m; rc4.bottom = h; m_ctrlFlash4.MoveWindow(&rc4); //m_ctrlFlash4.SetMovie(str4); if( !m_IsThreadPlay ) ThreadPlay ( str1, str2, str3, str4 ); } }// ThreadPlay() 함수에서 Thread 를 4개 생성 후 // Thread 를 돌리게 됩니다. // void CFlashmaxDlg::ThreadPlay ( CString &str1, CString &str2, CString &str3, CString &str4 ) { ///////////////////////////////////////// HANDLE hThread[4]; // 쓰레드 DWORD dwThreadid[4]; /////////////////////////////////////////a m_IsThreadPlay = TRUE; ////////////////////////////////////////////////////////////////////////// // Thread hThread[0] = CreateThread (NULL,0,Thread1, (LPVOID)&str1, 0, &dwThreadid[0]); hThread[1] = CreateThread (NULL,0,Thread2, (LPVOID)&str2, 0, &dwThreadid[1]); hThread[2] = CreateThread (NULL,0,Thread3, (LPVOID)&str3, 0, &dwThreadid[2]); hThread[3] = CreateThread (NULL,0,Thread4, (LPVOID)&str4, 0, &dwThreadid[3]); WaitForMultipleObjects (4,hThread,FALSE,INFINITE); CloseHandle ( hThread[0] ); CloseHandle ( hThread[1] ); CloseHandle ( hThread[2] ); CloseHandle ( hThread[3] ); } ////////////////////////////////////////////////////////////////////// // Thread 는 다음 구문을 돌고 종료를 하게 됩니다. // Thread 를 while(1) 로 해야 Thread 문이 종료가 되지 않습니다. // DWORD WINAPI Thread1 (LPVOID pVoid) { CString *str = (CString*)pVoid; // CString 형을 char 형으로 변환합니다. char * ch = NULL; ch = str->GetBuffer(str->GetLength()); CFlashmaxDlg *pFlash = (CFlashmaxDlg*)AfxGetMainWnd(); pFlash->m_ctrlFlash.SetMovie( ch ); return 0; }
접기