Здравствуйте
Есть ли возможность ускорить создание рабочего потока в программе для многопроцессорной машины?
Мне кажется, что функция 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();
}
Но время создания потока практически не уменьшилось.
С уважением
Андрей