Ускорение создания рабочего потока
От: and_tjurin Удмуртия  
Дата: 22.10.02 08:18
Оценка:
Здравствуйте

Есть ли возможность ускорить создание рабочего потока в программе для многопроцессорной машины?
Мне кажется, что функция AfxBeginThread() занимает слишком много процессорного времени, а если потоки в счетной программе создаются довольно часто а функция выполняется быстро, то собственно создание потока очень тормозит счет.
Сейчас потоки создаются так:



UINT fun_p(LPVOID WinPtr) { ((CCalcDoc*)((Inf*)(WinPtr))->pDoc)->fun(((Inf*)(WinPtr))->n); return 0; }
void CCalcDoc::fun(int par)
{
 ...

 End_Calc[par].SetEvent();
}

void CCalcDoc::Calculate()
{
 ...
// создание потоков
  for(i=0;i<N_PROC;i++) 
  {
      End_Calc[i].ResetEvent(); 
      AfxBeginThread(fun_p,(LPVOID)(aInf+i));
  }
  for(i=0;i<N_PROC;i++) ::WaitForSingleObject(End_Calc[i].m_hObject,INFINITE); 
}


Пробовал вариант


  for(i=0;i<N_PROC;i++) 
  {
      End_Calc[i].ResetEvent(); 
      pThread[i]=new CWinThread(fun_p,(LPVOID)(aInf+i));pThread[i]->m_bAutoDelete=TRUE;
      pThread[i]->CreateThread();
  }


Но время создания потока практически не уменьшилось.

С уважением
Андрей
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.