void thr_pool_petry() { clock_t st; HANDLE thr[100]; //std::vector<HANDLE> *thr = new std::vector<HANDLE>(); DWORD i; DWORD id[100]; init_petry ( n ); st = clock(); for( i = 0; i < n; i++ ) { thr[i] = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) pool_petry_thr, (void*) i, NULL, &id[i] ); } // Ждем, пока все завершится (поле time везде установится в 0 в конце) move_petry( finish_move ); t_time = clock() - st; printf( "APC Petry time: %d\n", t_time ); // Сложить результаты измерений ShowRes(); close_thr(thr,id); } // */
void petry_process () { clock_t st; HANDLE thr[100]; DWORD i; DWORD id[100]; st = clock(); weight = 0; petry_in[3][2] = n; for( i = 0; i < m; i++ ) { thr[i] = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) proc_petry, (LPDWORD) i, 0, &id[i] ); } move_petry( finish_move + 1 ); t_time = clock() - st; printf( "Petry time: %d\n", t_time ); ShowRes(); close_thr(thr,id); }
void thr_apc() { clock_t st; HANDLE h; std::vector<HANDLE> *thr = new std::vector<HANDLE>(); DWORD i; st = clock(); weight = 0; // Создаем спящие цепочки for( i = 0; i < m; i++ ) { h = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) proc_apc, (LPDWORD) i, 0, NULL ); thr->push_back( h ); } // Запускаем в каждой из них APC for( i = 0; i < m; i++ ) { h = thr->at( i ); QueueUserAPC( (PAPCFUNC) proc_thr, h, (ULONG_PTR) i ); } int t; // Ждем, пока все завершится while (last_free < n) Sleep(20); // Оповещаем основные цепочки о завершении done = true; t_time = clock () - st; printf( "APC time %d\n", t_time ); ShowRes(); }
// Линейно обработать void linear_process() { clock_t st, en; st = clock(); weight = 0; for( int i = 0; i < n; i++ ) Obrabotat( &data[i] ); en = clock(); l_time = en-st; printf( "Linear time: %d\n", l_time ); printf( " Weight: %d\n", weight ); ShowRes(); }
void CDlgSpeedTest::Sort() { CMap<DWORD,DWORD,SpeedTestResult,SpeedTestResult> mapTmp; CArray<SpeedTestResult,SpeedTestResult> ayTmp; for (int i=0; i<m_ayTestResult.GetCount(); i++) { SpeedTestResult res = m_ayTestResult.GetAt(i); if (!res.m_bError) { mapTmp.SetAt(res.m_result,res); } else ayTmp.Add(res); } m_ayTestResult.RemoveAll(); POSITION pos = mapTmp.GetStartPosition(); DWORD key; SpeedTestResult val; while (pos) { mapTmp.GetNextAssoc(pos,key,val); m_ayTestResult.Add(val); } for (int j=0; j<ayTmp.GetCount(); j++) { m_ayTestResult.Add(ayTmp.GetAt(j)); } for(int i=0; i<m_cList.GetItemCount(); i++) { CString str; str = m_cList.GetItemText(i,0); if (FindRes(str)) { m_cList.DeleteItem(i); i--; } } ShowRes(); }
// Запустить несколько простых цепочек void thr_process() { clock_t st; HANDLE thr[100]; DWORD i; st = clock(); weight = 0; for( i = 0; i < m; i++ ) { thr[i] = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) proc_thr, (LPDWORD) i, 0, NULL ); } WaitForMultipleObjects( m, &thr[0], TRUE, INFINITE ); t_time = clock() - st; printf( "Multithreaded time: %d\n", t_time ); ShowRes(); }